Skip to content

Commit

Permalink
Translate the python agent README.md into English (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
dbgsprw authored Aug 28, 2023
1 parent a6ce1b1 commit fbba51e
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 19 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Scavenger provides more sophisticated and clear UI and elaborate the instrumenta

### Components

* Scavenger agent
* Scavenger Agent
* Collect the code base and regularly send the invocations of the host application to collectors.
* Scavenger Collector
* Store the data received from the agent in the database.
Expand All @@ -17,6 +17,8 @@ Scavenger provides more sophisticated and clear UI and elaborate the instrumenta
* Provide APs for exploring invocations.
* Scavenger Frontend
* Provides UI.
* [Scavenger Python Agent (BETA)](https://github.com/naver/scavenger/blob/develop/scavenger-agent-python)
* Python agent of Scavenger Agent described above.

# Features

Expand Down
57 changes: 39 additions & 18 deletions scavenger-agent-python/README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
# Scavenger Agent Python (BETA)

*(본 Agent는 베타 버전으로 현재 개발 환경에서만의 사용을 권장하며 상용 환경에서의 사용을 권장하지 않습니다.)* Scavenger Agent의 Python 버전으로, Agent가 아닌 [Server Component](../doc/installation.md)는 사전에 준비되어야 합니다.
*(This Agent is a beta version and is recommended for use only in development environment, not for production environments)* This Agent is a Python
version of Scavenger Agent, and [Server Component](../doc/installation.md) must be prepared in advance.

## 개발 가이드
## Development Guide

Scavenger Agent Python은 패키지 관리자로 [Poetry](https://python-poetry.org/)를 이용합니다.
Scavenger Agent Python uses [Poetry](https://python-poetry.org/) as a package manager.

- Install dependencies

- 의존성 설치
```sh
$ poetry install
```
- 테스트

- Test

```sh
$ poetry run python -m unittest
```
- 빌드

- Build

```sh
$ poetry build
```

자세한 내용은 [Poetry Docs](https://python-poetry.org/docs/)를 참고해주세요.
For more information, please refer to [Poetry Docs](https://python-poetry.org/docs/).

## 에이전트 설치 가이드
## Installation Guide

### 전제조건
### Prerequisite

`Python >= 3.7`

### 설치
### Installation

```
$ pip install scavenger-agent-python --save
```
### 설정

설정은 설정 파일 `scavenger.conf`을 이용한 방식과 Config Instance를 직접 생성하는 두 가지 방식을 지원합니다.
### Configuration

Configuration supports two methods: using the configuration file `scavenger.conf` or directly creating a `Config` instance.

* Example of `scavenger.conf`

```py
# scavenger.conf
apiKey=eb99ff0f-aaaa-bbbb-cccc-5d1ec81f6183
Expand All @@ -50,7 +58,9 @@ codebase=.
config = Config.load_config()
agent = Agent(config)
```

* Example of `Config()`

```py
config = Config(
api_key="eb99ff0f-aaaa-bbbb-cccc-5d1ec81f6183",
Expand All @@ -63,8 +73,11 @@ config = Config(
agent = Agent(config)
```

### 에이전트 시작
Scavenger Agent Python은 Scavenger Agent Java와 달리, Agent 시작 코드를 직접 삽입하는 방식으로 동작합니다. 수집을 시작할 함수의 모듈이 import되기 전에 Agent가 동작해야 하므로 *반드시 프로그램의 시작점에 Agent 시작 코드가 삽입되어야 함을 유의하십시오.*
### Agent Start

Unlike Scavenger Agent Java, Scavenger Agent Python works by directly inserting the agent start code. *Note that the agent start code must be inserted
at the start point of the program*, because the agent must run before the module of the function to be collected is imported.

```py
from scavenger import Agent, Config

Expand All @@ -76,8 +89,11 @@ agent.start()
from ...
```

### 한계
* Graceful Shutdown에 대한 구현은 기존 프레임워크와의 충돌 가능성으로 인해 자동으로 지원하지 않습니다. 대신 아래와 같은 `agent.shutdown()` 함수를 지원하므로 직접 등록하여서 사용하여야 합니다.
### Limitations

* The implementation of Graceful Shutdown is not automatically supported due to potential conflicts with existing frameworks. Instead,
the `agent.shutdown()` function as shown below is provided, so you must register it into your framework shutdown routine by yourself.

```py
def shutdown_gracefully(*args):
# Shutdown your application/server first.
Expand All @@ -87,7 +103,11 @@ def shutdown_gracefully(*args):
signal.signal(signal.SIGTERM, shutdown_gracefully)
agent.start()
```
* Scavenger Python Agent는 현재 모듈/클래스의 레퍼런스를 대체하는 방식으로 동작하므로 레퍼런스를 사용하지 않고 함수를 호출하는 경우에는 동작하지 않습니다. 따라서 아래와 같이 Decorator를 이용해 함수의 레퍼런스만 따로 프레임워크에 저장해두는 경우, `def hello_world()`에는 동작하지 않습니다. 이는 추후 함수내 코드를 삽입하는 방식으로 변경되어 지원될 예정입니다.

* Scavenger Python Agent works by replacing the reference of the current module/class, so it does not work by calling a function without using a
reference. Therefore, if only the function reference is saved in the framework using Decorator as shown below, `def hello_world()` will not work.
This will be changed and supported in the future by inserting code within the function.

```py
from flask import Flask
app = Flask(__name__)
Expand All @@ -96,4 +116,5 @@ app = Flask(__name__)
def hello_world():
return 'Hello World!'
```
* 코드를 직접 읽어서 메서드를 탐색해야 하므로 pyc 파일은 현재 지원되지 않습니다.

* The direct Instrumentation for pyc files are currently not supported because Python code must be read by the scavenger agent.

0 comments on commit fbba51e

Please sign in to comment.