# 禄得量化计算端

## Code Structure

1. 运行器(Runner): 程序入口，负责程序启动，主进程循环，以及加载各个类型的工作进程。
2. 日志器(Logger): 负责主进程、工作进程的日志输出统一管理。
3. 连接器(Connector): 负责提供计算端上线、以及和服务端通信的细节实现。
4. 计算器(Calculator): 负责处理各种类型的计算任务，对外暴露计算函数接口。
5. 载入器(Loader): 负责加载计算端所需的数据(Parquet或DeltaLake)、以及数据预处理和生成。
6. 监视器(Monitor): 负责监控计算端运行情况并且定时上报。

## Development

### 在项目根目录下创建配置文件
```bash
cp .env.example .env
vim .env
```

### 以开发模式启动计算端
```bash
uv sync
uv run ldnode
```

### 构建并发布计算端版本
```bash
uv build
```

## Production

### 准备Python3.13版本

### 创建工作目录
```bash
mkdir ldnode && cd ldnode
python3 -m venv .venv
source ./.venv/bin/activate
```

### 安装LDNode
```bash
pip install ldnode -i https://pypi.lude.site/simple
```

### 启动LDNode
```bash
vim .env # 创建启动配置
ldnode # 启动进程
```

### macOS 开机自启（launchd）

通过 LaunchDaemon 注册为系统级服务，无需 GUI 登录即可运行（适合 SSH 远程部署）。

```bash
# 安装服务（需 sudo，默认工作目录为 ~/ldnode）
sudo ./deploy/macos/install.sh [工作目录]

# 卸载服务
sudo ./deploy/macos/uninstall.sh
```

安装后行为：
- 开机自动启动（不依赖用户登录）
- 以安装时的用户身份运行（非 root）
- 进程崩溃 10 秒后自动重启
- 文件描述符限制自动设置为 65535
- 日志位于 `~/Library/Logs/lude-node/`

常用管理命令：
```bash
sudo launchctl list | grep site.lude.node   # 查看状态
sudo launchctl bootout system/site.lude.node  # 停止
sudo launchctl bootstrap system /Library/LaunchDaemons/site.lude.node.plist  # 启动
```
