Code Duplication    Length = 27-27 lines in 2 locations

kytos/core/helpers.py 2 locations

@@ 238-264 (lines=27) @@
235
                    cls.controller.dead_letter.add_event(kytos_event)
236
            return result
237
238
        async def handler_context_apm(*args, apm_client=None):
239
            """Async handler's execution context with APM instrumentation."""
240
            cls, kytos_event = args[0], args[1]
241
            trace_parent = kytos_event.trace_parent
242
            tx_type = "kytos_event"
243
            tx = apm_client.begin_transaction(transaction_type=tx_type,
244
                                              trace_parent=trace_parent)
245
            kytos_event.trace_parent = tx.trace_parent
246
            tx.name = f"{kytos_event.name}@{cls.napp_id}"
247
            try:
248
                result = await handler(*args)
249
                tx.result = result
250
            except Exception as exc:
251
                result = None
252
                traceback_str = traceback.format_exc().replace("\n", ", ")
253
                LOG.error(f"alisten_to handler: {handler}, "
254
                          f"args: {args} traceback: {traceback_str}")
255
                if hasattr(cls, "controller"):
256
                    cls.controller.dead_letter.add_event(kytos_event)
257
                apm_client.capture_exception(
258
                    exc_info=(type(exc), exc, exc.__traceback__),
259
                    context={"args": args},
260
                    handled=False,
261
                )
262
            tx.end()
263
            apm_client.tracer.queue_func("transaction", tx.to_dict())
264
            return result
265
266
        handler_func, kwargs = handler_context, {}
267
        if get_apm_name() == "es":
@@ 148-174 (lines=27) @@
145
                    cls.controller.dead_letter.add_event(kytos_event)
146
            return result
147
148
        def handler_context_apm(*args, apm_client=None):
149
            """Handler's context for ThreadPool APM instrumentation."""
150
            cls, kytos_event = args[0], args[1]
151
            trace_parent = kytos_event.trace_parent
152
            tx_type = "kytos_event"
153
            tx = apm_client.begin_transaction(transaction_type=tx_type,
154
                                              trace_parent=trace_parent)
155
            kytos_event.trace_parent = tx.trace_parent
156
            tx.name = f"{kytos_event.name}@{cls.napp_id}"
157
            try:
158
                result = handler(*args)
159
                tx.result = result
160
            except Exception as exc:
161
                result = None
162
                traceback_str = traceback.format_exc().replace("\n", ", ")
163
                LOG.error(f"listen_to handler: {handler}, "
164
                          f"args: {args} traceback: {traceback_str}")
165
                if hasattr(cls, "controller"):
166
                    cls.controller.dead_letter.add_event(kytos_event)
167
                apm_client.capture_exception(
168
                    exc_info=(type(exc), exc, exc.__traceback__),
169
                    context={"args": args},
170
                    handled=False,
171
                )
172
            tx.end()
173
            apm_client.tracer.queue_func("transaction", tx.to_dict())
174
            return result
175
176
        handler_func, kwargs = handler_context, {}
177
        if get_apm_name() == "es":