Mô-đun nhật ký
Mô tả tính năng
Tiền tố API thống nhất là http(s)://<your-domain>
Nên sử dụng HTTPS trong môi trường sản xuất để bảo mật mã thông báo xác thực. HTTP chỉ được khuyến nghị cho môi trường phát triển.
Hệ thống truy vấn nhật ký theo lớp hỗ trợ quản trị viên xem nhật ký trên toàn trang web và người dùng xem nhật ký cá nhân. Nó cung cấp số liệu thống kê theo thời gian thực (RPM/TPM), lọc đa chiều, dọn dẹp dữ liệu lịch sử và các tính năng khác. Giao diện truy vấn Mã thông báo hỗ trợ CORS tạo điều kiện thuận lợi cho việc tích hợp của bên thứ ba.
🔐 Không cần xác thực
Nhật ký truy vấn bằng mã thông báo
- Tên giao diện: Nhật ký truy vấn bằng mã thông báo
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/token - Yêu cầu xác thực: Công khai
- Mô tả chức năng: Truy vấn các bản ghi nhật ký liên quan bằng cách sử dụng Token key, hỗ trợ truy cập nhiều nguồn gốc
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/token?key=`<TOKEN_PLACEHOLDER>`', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": [
{
"id": 1,
"type": 2,
"content": "APICall successful",
"model_name": "gpt-4",
"quota": 1000,
"created_at": 1640995000
}
]
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "TokenDoes not exist or has no permission"
}🧾 Mô tả trường:
key (Chuỗi): Token key, bắt buộc
🔐 Xác thực người dùng
Thống kê nhật ký của tôi
- Tên giao diện: Thống kê nhật ký của tôi
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/self/stat - Yêu cầu xác thực: Người dùng
- Mô tả chức năng: Truy xuất số liệu thống kê nhật ký của người dùng hiện tại, bao gồm mức tiêu thụ hạn ngạch, tần suất yêu cầu và mức sử dụng Mã thông báo
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/self/stat?type=2&start_timestamp=1640908800&end_timestamp=1640995200&token_name=api_token&model_name=gpt-4&group=default', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": {
"quota": 50000,
"rpm": 10,
"tpm": 1500
}
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Failed to obtain statistics"
}🧾 Mô tả trường:
type(Số): Loại nhật ký, giá trị tùy chọn: 1=Nạp tiền, 2=Tiêu thụ, 3=Quản lý, 4=Lỗi, 5=Hệ thốngstart_timestamp(Số): Dấu thời gian bắt đầuend_timestamp(Số): Dấu thời gian kết thúctoken_name(String): Lọc tên tokenmodel_name(String): Lọc tên modelgroup(String): Lọc nhómquota(Number): Tổng hạn mức tiêu thụ trong khoảng thời gian quy địnhrpm(Số): Số yêu cầu mỗi phút (60 giây cuối)tpm(Số): Token mỗi phút (60 giây cuối)
Lấy nhật ký của tôi
- Tên giao diện: Lấy nhật ký của tôi
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/self - Yêu cầu xác thực: Người dùng
- Mô tả chức năng: Truy xuất theo số trang các bản ghi nhật ký của người dùng hiện tại, hỗ trợ nhiều điều kiện lọc
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/self?p=1&page_size=20&type=2&start_timestamp=1640908800&end_timestamp=1640995200&token_name=api_token&model_name=gpt-4&group=default', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"user_id": 1,
"created_at": 1640995000,
"type": 2,
"content": "APICall successful",
"token_name": "api_token",
"model_name": "gpt-4",
"quota": 1000,
"prompt_tokens": 50,
"completion_tokens": 100
}
],
"total": 25,
"page": 1,
"page_size": 20
}
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Failed to get log"
}🧾 Mô tả trường:
Các tham số yêu cầu giống như giao diện Get All Logs, nhưng chỉ trả về các bản ghi nhật ký của người dùng hiện tại
Tìm kiếm nhật ký của tôi
- Tên giao diện: Tìm kiếm Nhật ký của tôi
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/self/search - Yêu cầu xác thực: Người dùng
- Mô tả chức năng: Tìm kiếm bản ghi nhật ký của người dùng hiện tại dựa trên từ khóa
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/self/search?keyword=gpt-4', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": [
{
"id": 1,
"type": 2,
"content": "GPT-4Call successful",
"model_name": "gpt-4",
"created_at": 1640995000
}
]
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Search log failed"
}🧾 Mô tả trường:
keyword (String): Từ khóa tìm kiếm, khớp với loại nhật ký của người dùng hiện tại
🔐 Xác thực của quản trị viên
Nhận tất cả nhật ký
- Tên giao diện: Nhận tất cả nhật ký
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/ - Yêu cầu xác thực: Quản trị viên
- Mô tả chức năng: Truy xuất theo số trang của tất cả các bản ghi nhật ký trong hệ thống, hỗ trợ nhiều điều kiện lọc và sàng lọc loại nhật ký
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/?p=1&page_size=20&type=2&start_timestamp=1640908800&end_timestamp=1640995200&username=testuser&token_name=api_token&model_name=gpt-4&channel=1&group=default', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"user_id": 1,
"created_at": 1640995000,
"type": 2,
"content": "APICall successful",
"username": "testuser",
"token_name": "api_token",
"model_name": "gpt-4",
"quota": 1000,
"prompt_tokens": 50,
"completion_tokens": 100,
"use_time": 2,
"is_stream": false,
"channel_id": 1,
"channel_name": "OpenAIchannel",
"token_id": 1,
"group": "default",
"ip": "192.168.1.1",
"other": "{\"model_ratio\":15.0}"
}
],
"total": 100,
"page": 1,
"page_size": 20
}
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Failed to get log"
}🧾 Mô tả trường:
p(Number): Số trang, mặc định là 1page_size(Number): Số mục trên một trang, mặc định là 20type(Số): Loại nhật ký, giá trị tùy chọn: 1=Nạp tiền, 2=Tiêu thụ, 3=Quản lý, 4=Lỗi, 5=Nhật ký hệ thống.go:41-48start_timestamp(Số): Dấu thời gian bắt đầuend_timestamp(Số): Dấu thời gian kết thúcusername(String): Lọc tên người dùngtoken_name(String): Lọc tên tokenmodel_name(String): Lọc tên modelchannel(Số): Bộ lọc ID kênhgroup(String): Lọc nhóm
Xóa nhật ký lịch sử
- Tên giao diện: Xóa nhật ký lịch sử
- Phương thức HTTP: XÓA
- Đường dẫn:
/api/log/ - Yêu cầu xác thực: Quản trị viên
- Mô tả chức năng: Xóa hàng loạt các bản ghi nhật ký lịch sử cũ hơn dấu thời gian đã chỉ định, hỗ trợ xóa theo giai đoạn để tránh tải cơ sở dữ liệu quá mức
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/?target_timestamp=1640908800', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": 1500
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "target timestamp is required"
}🧾 Mô tả trường:
target_timestamp(Number): Dấu thời gian mục tiêu, xóa tất cả nhật ký trước thời điểm này, bắt buộcdata(Number): Số log được xóa thành công
Thống kê nhật ký
- Tên giao diện: Thống kê nhật ký
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/stat - Yêu cầu xác thực: Quản trị viên
- Mô tả chức năng: Truy xuất số liệu thống kê nhật ký trong phạm vi thời gian và điều kiện đã chỉ định, bao gồm mức tiêu thụ hạn ngạch, tần suất yêu cầu và mức sử dụng Mã thông báo
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/stat?type=2&start_timestamp=1640908800&end_timestamp=1640995200&username=testuser&token_name=api_token&model_name=gpt-4&channel=1&group=default', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": {
"quota": 150000,
"rpm": 25,
"tpm": 3500
}
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Failed to obtain statistics"
}🧾 Mô tả trường:
- Các thông số yêu cầu giống như giao diện Get All Logs
quota(Number): Tổng hạn mức tiêu thụ trong khoảng thời gian quy địnhrpm(Số): Số yêu cầu mỗi phút (60 giây qua) log.go:357tpm(Số): Số token mỗi phút (tổng củaấu_tắc_token + hoàn_token trong 60 giây qua)
Tìm kiếm tất cả nhật ký
- Tên giao diện: Tìm kiếm tất cả nhật ký
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/log/search - Yêu cầu xác thực: Quản trị viên
- Mô tả chức năng: Tìm kiếm tất cả các bản ghi nhật ký trong hệ thống dựa trên từ khóa
💡 Yêu cầu Ví dụ:
const response = await fetch('/api/log/search?keyword=error', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": [
{
"id": 1,
"type": 4,
"content": "APICall error",
"username": "testuser",
"created_at": 1640995000
}
]
}❗ Ví dụ phản hồi không thành công:
{
"success": false,
"message": "Search log failed"
}🧾 Mô tả trường:
keyword (String): Từ khóa tìm kiếm, có thể khớp với loại log hoặc nội dung