You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by "sonatype-lift[bot] (via GitHub)" <gi...@apache.org> on 2023/07/07 07:44:17 UTC
[GitHub] [skywalking-python] sonatype-lift[bot] commented on a diff in pull request #316: Python agent performance enhancement with asyncio
sonatype-lift[bot] commented on code in PR #316:
URL: https://github.com/apache/skywalking-python/pull/316#discussion_r1255392717
##########
skywalking/agent/__init__.py:
##########
@@ -19,16 +19,19 @@
import functools
import os
import sys
+import asyncio
from queue import Queue, Full
from threading import Thread, Event
from typing import TYPE_CHECKING, Optional
+from uvloop import install as install_uvloop
Review Comment:
<picture><img alt="8% of developers fix this issue" src="https://lift.sonatype.com/api/commentimage/fixrate/8/display.svg"></picture>
<b>*[E0401](https://pylint.readthedocs.io/en/v2.17.1/user_guide/messages/error/import-error.html):</b>* Unable to import 'uvloop'
ââ <b>24 similar findings have been found in this PR</b>
<details><summary>đ Expand here to view all instances of this finding</summary><br/>
<div align=\"center\">
| **File Path** | **Line Number** |
| ------------- | ------------- |
| skywalking/agent/protocol/grpc_aio.py | [22](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L22) |
| skywalking/agent/protocol/grpc_aio.py | [32](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L32) |
| skywalking/agent/protocol/grpc_aio.py | [33](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L33) |
| skywalking/agent/protocol/grpc_aio.py | [34](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L34) |
| skywalking/agent/protocol/grpc_aio.py | [35](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L35) |
| skywalking/agent/protocol/grpc_aio.py | [36](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L36) |
| skywalking/agent/protocol/http_aio.py | [24](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/http_aio.py#L24) |
| skywalking/agent/protocol/interceptors_aio.py | [20](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/interceptors_aio.py#L20) |
| skywalking/agent/protocol/kafka_aio.py | [26](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L26) |
| skywalking/agent/protocol/kafka_aio.py | [27](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L27) |
<p> Showing <b>10</b> of <b> 24 </b> findings. <a href="https://lift.sonatype.com/results/github.com/apache/skywalking-python/01H4QMRVMEX9RVP934QT814C2S?t=Pylint|E0401" target="_blank">Visit the Lift Web Console</a> to see all.</p></div></details>
---
<details><summary>âšī¸ Expand to see all <b>@sonatype-lift</b> commands</summary>
You can reply with the following commands. For example, reply with ***@sonatype-lift ignoreall*** to leave out all findings.
| **Command** | **Usage** |
| ------------- | ------------- |
| `@sonatype-lift ignore` | Leave out the above finding from this PR |
| `@sonatype-lift ignoreall` | Leave out all the existing findings from this PR |
| `@sonatype-lift exclude <file\|issue\|path\|tool>` | Exclude specified `file\|issue\|path\|tool` from Lift findings by updating your config.toml file |
**Note:** When talking to LiftBot, you need to **refresh** the page to see its response.
<sub>[Click here](https://github.com/apps/sonatype-lift/installations/new) to add LiftBot to another repo.</sub></details>
##########
skywalking/agent/protocol/grpc_aio.py:
##########
@@ -0,0 +1,211 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import logging
+import traceback
+from asyncio import Queue, Event
+
+import grpc
+
+from skywalking import config
+from skywalking.agent.protocol import ProtocolAsync
+from skywalking.agent.protocol.interceptors_aio import header_adder_interceptor_async
+from skywalking.client.grpc_aio import GrpcServiceManagementClientAsync, GrpcTraceSegmentReportServiceAsync, \
+ GrpcProfileTaskChannelServiceAsync, GrpcLogReportServiceAsync, GrpcMeterReportServiceAsync
+from skywalking.loggings import logger, logger_debug_enabled
+from skywalking.profile.profile_task import ProfileTask
+from skywalking.profile.snapshot import TracingThreadSnapshot
+from skywalking.protocol.common.Common_pb2 import KeyStringValuePair
Review Comment:
<picture><img alt="5% of developers fix this issue" src="https://lift.sonatype.com/api/commentimage/fixrate/5/display.svg"></picture>
<b>*[E0611](https://pylint.readthedocs.io/en/v2.17.1/user_guide/messages/error/no-name-in-module.html):</b>* No name 'protocol' in module 'skywalking'
ââ <b>18 similar findings have been found in this PR</b>
<details><summary>đ Expand here to view all instances of this finding</summary><br/>
<div align=\"center\">
| **File Path** | **Line Number** |
| ------------- | ------------- |
| skywalking/agent/protocol/grpc_aio.py | [33](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L33) |
| skywalking/agent/protocol/grpc_aio.py | [34](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L34) |
| skywalking/agent/protocol/grpc_aio.py | [35](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L35) |
| skywalking/agent/protocol/grpc_aio.py | [36](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L36) |
| skywalking/agent/protocol/http_aio.py | [24](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/http_aio.py#L24) |
| skywalking/agent/protocol/kafka_aio.py | [26](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L26) |
| skywalking/agent/protocol/kafka_aio.py | [27](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L27) |
| skywalking/agent/protocol/kafka_aio.py | [28](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L28) |
| skywalking/agent/protocol/kafka_aio.py | [29](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L29) |
| skywalking/client/grpc_aio.py | [27](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/client/grpc_aio.py#L27) |
<p> Showing <b>10</b> of <b> 18 </b> findings. <a href="https://lift.sonatype.com/results/github.com/apache/skywalking-python/01H4QMRVMEX9RVP934QT814C2S?t=Pylint|E0611" target="_blank">Visit the Lift Web Console</a> to see all.</p></div></details>
---
<details><summary>âšī¸ Expand to see all <b>@sonatype-lift</b> commands</summary>
You can reply with the following commands. For example, reply with ***@sonatype-lift ignoreall*** to leave out all findings.
| **Command** | **Usage** |
| ------------- | ------------- |
| `@sonatype-lift ignore` | Leave out the above finding from this PR |
| `@sonatype-lift ignoreall` | Leave out all the existing findings from this PR |
| `@sonatype-lift exclude <file\|issue\|path\|tool>` | Exclude specified `file\|issue\|path\|tool` from Lift findings by updating your config.toml file |
**Note:** When talking to LiftBot, you need to **refresh** the page to see its response.
<sub>[Click here](https://github.com/apps/sonatype-lift/installations/new) to add LiftBot to another repo.</sub></details>
##########
skywalking/agent/protocol/http_aio.py:
##########
@@ -0,0 +1,94 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from asyncio import Queue, Event
+
+from skywalking.agent import ProtocolAsync
+from skywalking.client.http_aio import HttpServiceManagementClientAsync, HttpTraceSegmentReportServiceAsync, \
+ HttpLogDataReportServiceAsync
+from skywalking.loggings import logger, logger_debug_enabled
+from skywalking.protocol.logging.Logging_pb2 import LogData
+from skywalking.trace.segment import Segment
+
+
+class HttpProtocolAsync(ProtocolAsync):
+ def __init__(self):
+ self.properties_sent = Event()
+ self.service_management = HttpServiceManagementClientAsync()
+ self.traces_reporter = HttpTraceSegmentReportServiceAsync()
+ self.log_reporter = HttpLogDataReportServiceAsync()
+
+ async def heartbeat(self):
+ if not self.properties_sent.is_set():
+ logger.debug('Sending instance properties')
+ await self.service_management.send_instance_props()
+ self.properties_sent.set()
+
+ logger.debug('Sending heartbeat')
+ await self.service_management.send_heart_beat()
+ logger.debug('Heartbeat sent')
+
+ async def report_segment(self, queue: Queue):
+ async def generator():
+ while True:
+ # Let eventloop schedule blocking instead of user configuration: `config.agent_queue_timeout`
+ segment = await queue.get() # type: Segment
+
+ queue.task_done()
+
+ if logger_debug_enabled:
+ logger.debug('reporting segment %s', segment)
+
+ yield segment
+
+ try:
+ await self.traces_reporter.report(generator=generator())
+ except Exception as e:
+ if logger_debug_enabled:
+ logger.debug('reporting segment failed: %s', e)
+
+ async def report_log(self, queue: Queue):
+ async def generator():
+ while True:
+ # Let eventloop schedule blocking instead of user configuration: `config.agent_queue_timeout`
+ log_data = await queue.get() # type: LogData
+
+ queue.task_done()
+
+ if logger_debug_enabled:
+ logger.debug('Reporting Log %s', log_data.timestamp)
+
+ yield log_data
+
+ try:
+ await self.log_reporter.report(generator=generator())
+ except Exception as e:
+ if logger_debug_enabled:
+ logger.debug('reporting log failed: %s', e)
+
+ # meter support requires OAP side HTTP handler to be implemented
+ async def report_meter(self, queue: Queue = True):
Review Comment:
<picture><img alt="17% of developers fix this issue" src="https://lift.sonatype.com/api/commentimage/fixrate/17/display.svg"></picture>
<b>*[Incompatible variable type](https://pyre-check.org/docs/errors/#9-incompatible-variable-type):</b>* queue is declared to have type `Queue[typing.Any]` but is used as type `bool`.
ââ <b>2 similar findings have been found in this PR</b>
<details><summary>đ Expand here to view all instances of this finding</summary><br/>
<div align=\"center\">
| **File Path** | **Line Number** |
| ------------- | ------------- |
| skywalking/agent/protocol/http_aio.py | [87](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/http_aio.py#L87) |
| skywalking/meter/__init__.py | [38](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/meter/__init__.py#L38) |
<p><a href="https://lift.sonatype.com/results/github.com/apache/skywalking-python/01H4QMRVMEX9RVP934QT814C2S?t=Pyre|Incompatible variable type" target="_blank">Visit the Lift Web Console</a> to find more details in your report.</p></div></details>
---
<details><summary>âšī¸ Expand to see all <b>@sonatype-lift</b> commands</summary>
You can reply with the following commands. For example, reply with ***@sonatype-lift ignoreall*** to leave out all findings.
| **Command** | **Usage** |
| ------------- | ------------- |
| `@sonatype-lift ignore` | Leave out the above finding from this PR |
| `@sonatype-lift ignoreall` | Leave out all the existing findings from this PR |
| `@sonatype-lift exclude <file\|issue\|path\|tool>` | Exclude specified `file\|issue\|path\|tool` from Lift findings by updating your config.toml file |
**Note:** When talking to LiftBot, you need to **refresh** the page to see its response.
<sub>[Click here](https://github.com/apps/sonatype-lift/installations/new) to add LiftBot to another repo.</sub></details>
##########
skywalking/agent/__init__.py:
##########
@@ -19,16 +19,19 @@
import functools
import os
import sys
+import asyncio
from queue import Queue, Full
from threading import Thread, Event
from typing import TYPE_CHECKING, Optional
+from uvloop import install as install_uvloop
Review Comment:
<picture><img alt="10% of developers fix this issue" src="https://lift.sonatype.com/api/commentimage/fixrate/10/display.svg"></picture>
<b>*reportMissingImports:</b>* Import "uvloop" could not be resolved
ââ <b>20 similar findings have been found in this PR</b>
<details><summary>đ Expand here to view all instances of this finding</summary><br/>
<div align=\"center\">
| **File Path** | **Line Number** |
| ------------- | ------------- |
| skywalking/agent/protocol/grpc_aio.py | [32](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L32) |
| skywalking/agent/protocol/grpc_aio.py | [33](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L33) |
| skywalking/agent/protocol/grpc_aio.py | [34](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L34) |
| skywalking/agent/protocol/grpc_aio.py | [35](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L35) |
| skywalking/agent/protocol/grpc_aio.py | [36](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/grpc_aio.py#L36) |
| skywalking/agent/protocol/http_aio.py | [24](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/http_aio.py#L24) |
| skywalking/agent/protocol/kafka_aio.py | [26](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L26) |
| skywalking/agent/protocol/kafka_aio.py | [27](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L27) |
| skywalking/agent/protocol/kafka_aio.py | [28](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L28) |
| skywalking/agent/protocol/kafka_aio.py | [29](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/protocol/kafka_aio.py#L29) |
<p> Showing <b>10</b> of <b> 20 </b> findings. <a href="https://lift.sonatype.com/results/github.com/apache/skywalking-python/01H4QMRVMEX9RVP934QT814C2S?t=Pyright|reportMissingImports" target="_blank">Visit the Lift Web Console</a> to see all.</p></div></details>
---
<details><summary>âšī¸ Expand to see all <b>@sonatype-lift</b> commands</summary>
You can reply with the following commands. For example, reply with ***@sonatype-lift ignoreall*** to leave out all findings.
| **Command** | **Usage** |
| ------------- | ------------- |
| `@sonatype-lift ignore` | Leave out the above finding from this PR |
| `@sonatype-lift ignoreall` | Leave out all the existing findings from this PR |
| `@sonatype-lift exclude <file\|issue\|path\|tool>` | Exclude specified `file\|issue\|path\|tool` from Lift findings by updating your config.toml file |
**Note:** When talking to LiftBot, you need to **refresh** the page to see its response.
<sub>[Click here](https://github.com/apps/sonatype-lift/installations/new) to add LiftBot to another repo.</sub></details>
##########
skywalking/agent/__init__.py:
##########
@@ -382,7 +414,270 @@ def notify_profile_finish(self, task: ProfileTask):
logger.error(f'notify profile task finish to backend fail. {str(e)}')
+class SkyWalkingAgentAsync(Singleton):
+ __started: bool = False # shared by all instances
+
+ def __init__(self):
+ """
+ ProtocolAsync is one of gRPC, HTTP and Kafka that
+ provides async clients to reporters to communicate with OAP backend.
+ """
+ self.started_pid = None
+ self.__protocol: Optional[ProtocolAsync] = None
+ self._finished: Optional[asyncio.Event] = None
+ # Initialize asyncio queues for segment, log, meter and profiling snapshots
+ self.__segment_queue: Optional[asyncio.Queue] = None
+ self.__log_queue: Optional[asyncio.Queue] = None
+ self.__meter_queue: Optional[asyncio.Queue] = None
+ self.__snapshot_queue: Optional[asyncio.Queue] = None
+
+ self.event_loop_thread: Optional[Thread] = None
+
+ def __bootstrap(self):
+ if config.agent_protocol == 'grpc':
+ from skywalking.agent.protocol.grpc_aio import GrpcProtocolAsync
+ self.__protocol = GrpcProtocolAsync()
+ elif config.agent_protocol == 'http':
+ from skywalking.agent.protocol.http_aio import HttpProtocolAsync
+ self.__protocol = HttpProtocolAsync()
+ elif config.agent_protocol == 'kafka':
+ from skywalking.agent.protocol.kafka_aio import KafkaProtocolAsync
+ self.__protocol = KafkaProtocolAsync()
+ else:
+ raise ValueError(f'Unsupported protocol: {config.agent_protocol}')
+ logger.info(f'You are using {config.agent_protocol} protocol to communicate with OAP backend')
+
+ # Start reporter's asyncio coroutines and register queues
+ self.__init_coroutine()
+
+ def __init_coroutine(self) -> None:
+ """
+ This method initializes all asyncio coroutines for the agent and reporters.
+
+ Heartbeat task is started by default.
+ Segment reporter task and segment queue is created by default.
+ All other queues and tasks depends on user configuration.
+ """
+
+ self.background_coroutines = set()
+
+ self.background_coroutines.add(self.__heartbeat())
+ self.background_coroutines.add(self.__report_segment())
+
+ if config.agent_meter_reporter_active:
+ self.background_coroutines.add(self.__report_meter())
+
+ if config.agent_pvm_meter_reporter_active:
+ from skywalking.meter.pvm.cpu_usage import CPUUsageDataSource
+ from skywalking.meter.pvm.gc_data import GCDataSource
+ from skywalking.meter.pvm.mem_usage import MEMUsageDataSource
+ from skywalking.meter.pvm.thread_data import ThreadDataSource
+
+ MEMUsageDataSource().register()
+ CPUUsageDataSource().register()
+ GCDataSource().register()
+ ThreadDataSource().register()
+
+ if config.agent_log_reporter_active:
+ self.background_coroutines.add(self.__report_log())
+
+ if config.agent_profile_active:
+ self.background_coroutines.add(self.__command_dispatch())
+ self.background_coroutines.add(self.__query_profile_command())
+ self.background_coroutines.add(self.__send_profile_snapshot())
+
+ async def __start_event_loop_async(self) -> None:
+ self.loop = asyncio.get_running_loop() # always get the current running loop first
+ # asyncio Queue should be created after the creation of event loop
+ self.__segment_queue = asyncio.Queue(maxsize=config.agent_trace_reporter_max_buffer_size)
+ if config.agent_meter_reporter_active:
+ self.__meter_queue = asyncio.Queue(maxsize=config.agent_meter_reporter_max_buffer_size)
+ if config.agent_log_reporter_active:
+ self.__log_queue = asyncio.Queue(maxsize=config.agent_log_reporter_max_buffer_size)
+ if config.agent_profile_active:
+ self.__snapshot_queue = asyncio.Queue(maxsize=config.agent_profile_snapshot_transport_buffer_size)
+ # initialize background coroutines
+ self.background_coroutines = set()
+ self.background_tasks = set()
+ self._finished = asyncio.Event()
+
+ # Install log reporter core
+ # TODO - Add support for printing traceID/ context in logs
+ if config.agent_log_reporter_active:
+ from skywalking import log
+ log.install()
+ if config.agent_meter_reporter_active:
+ # meter.init(force=True)
+ await meter.init_async()
+
+ self.__bootstrap() # gather all coroutines
+
+ logger.debug('All background coroutines started')
+ await asyncio.gather(*self.background_coroutines)
+
+ def __start_event_loop(self) -> None:
+ try:
+ asyncio.run(self.__start_event_loop_async())
+ except asyncio.CancelledError:
+ logger.info('Python agent asyncio event loop is closed')
+ except Exception as e:
+ logger.error(f'Error in Python agent asyncio event loop: {e}')
+ finally:
+ self._finished.set()
Review Comment:
<picture><img alt="6% of developers fix this issue" src="https://lift.sonatype.com/api/commentimage/fixrate/6/display.svg"></picture>
<b>*reportOptionalMemberAccess:</b>* "set" is not a known member of "None"
ââ <b>13 similar findings have been found in this PR</b>
<details><summary>đ Expand here to view all instances of this finding</summary><br/>
<div align=\"center\">
| **File Path** | **Line Number** |
| ------------- | ------------- |
| skywalking/agent/__init__.py | [570](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L570) |
| skywalking/agent/__init__.py | [573](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L573) |
| skywalking/agent/__init__.py | [576](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L576) |
| skywalking/agent/__init__.py | [579](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L579) |
| skywalking/agent/__init__.py | [590](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L590) |
| skywalking/agent/__init__.py | [604](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L604) |
| skywalking/agent/__init__.py | [611](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L611) |
| skywalking/agent/__init__.py | [619](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L619) |
| skywalking/agent/__init__.py | [625](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L625) |
| skywalking/agent/__init__.py | [630](https://github.com/apache/skywalking-python/blob/2bde8abd6bf5f55acbd2e2f5dede08ebc649a330/skywalking/agent/__init__.py#L630) |
<p> Showing <b>10</b> of <b> 13 </b> findings. <a href="https://lift.sonatype.com/results/github.com/apache/skywalking-python/01H4QMRVMEX9RVP934QT814C2S?t=Pyright|reportOptionalMemberAccess" target="_blank">Visit the Lift Web Console</a> to see all.</p></div></details>
---
<details><summary>âšī¸ Expand to see all <b>@sonatype-lift</b> commands</summary>
You can reply with the following commands. For example, reply with ***@sonatype-lift ignoreall*** to leave out all findings.
| **Command** | **Usage** |
| ------------- | ------------- |
| `@sonatype-lift ignore` | Leave out the above finding from this PR |
| `@sonatype-lift ignoreall` | Leave out all the existing findings from this PR |
| `@sonatype-lift exclude <file\|issue\|path\|tool>` | Exclude specified `file\|issue\|path\|tool` from Lift findings by updating your config.toml file |
**Note:** When talking to LiftBot, you need to **refresh** the page to see its response.
<sub>[Click here](https://github.com/apps/sonatype-lift/installations/new) to add LiftBot to another repo.</sub></details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@skywalking.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org