You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
5.7 KiB
237 lines
5.7 KiB
// Package handler 管理后台Handler实现
|
|
package handler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"market-data-service/api"
|
|
"market-data-service/internal/service"
|
|
)
|
|
|
|
// AdminHandlerImpl 管理后台Handler实现
|
|
type AdminHandlerImpl struct {
|
|
configService service.ConfigService
|
|
adapterService service.AdapterService
|
|
testService service.TestService
|
|
}
|
|
|
|
// NewAdminHandlerImpl 创建管理后台Handler
|
|
func NewAdminHandlerImpl(
|
|
configService service.ConfigService,
|
|
adapterService service.AdapterService,
|
|
testService service.TestService,
|
|
) *AdminHandlerImpl {
|
|
return &AdminHandlerImpl{
|
|
configService: configService,
|
|
adapterService: adapterService,
|
|
testService: testService,
|
|
}
|
|
}
|
|
|
|
// Ensure interfaces are implemented
|
|
var _ api.ConfigHandler = (*AdminHandlerImpl)(nil)
|
|
var _ api.AdapterHandler = (*AdminHandlerImpl)(nil)
|
|
var _ api.TestHandler = (*AdminHandlerImpl)(nil)
|
|
|
|
// ============================================
|
|
// 配置管理接口实现
|
|
// ============================================
|
|
|
|
// GetConfigList 获取配置列表
|
|
func (h *AdminHandlerImpl) GetConfigList(ctx context.Context, req *api.ConfigListRequest) (*api.Response, error) {
|
|
data, err := h.configService.GetConfigList(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// UpdateConfig 更新配置
|
|
func (h *AdminHandlerImpl) UpdateConfig(ctx context.Context, req *api.ConfigUpdateRequest) (*api.Response, error) {
|
|
data, err := h.configService.UpdateConfig(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// ReloadConfig 热加载配置
|
|
func (h *AdminHandlerImpl) ReloadConfig(ctx context.Context, req *api.ReloadRequest) (*api.Response, error) {
|
|
data, err := h.configService.ReloadConfig(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// GetSystemStatus 获取系统状态
|
|
func (h *AdminHandlerImpl) GetSystemStatus(ctx context.Context) (*api.Response, error) {
|
|
data, err := h.configService.GetSystemStatus(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// ============================================
|
|
// 适配器管理接口实现
|
|
// ============================================
|
|
|
|
// GetAdapterList 获取适配器列表
|
|
func (h *AdminHandlerImpl) GetAdapterList(ctx context.Context) (*api.Response, error) {
|
|
data, err := h.adapterService.GetAdapterList(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// ToggleAdapter 启用/禁用适配器
|
|
func (h *AdminHandlerImpl) ToggleAdapter(ctx context.Context, req *api.AdapterToggleRequest) (*api.Response, error) {
|
|
if err := h.adapterService.ToggleAdapter(ctx, req); err != nil {
|
|
return &api.Response{
|
|
Code: 500,
|
|
Message: err.Error(),
|
|
}, nil
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
}, nil
|
|
}
|
|
|
|
// UpdateAdapterConfig 更新适配器配置
|
|
func (h *AdminHandlerImpl) UpdateAdapterConfig(ctx context.Context, req *api.AdapterConfigUpdateRequest) (*api.Response, error) {
|
|
if err := h.adapterService.UpdateAdapterConfig(ctx, req); err != nil {
|
|
return &api.Response{
|
|
Code: 500,
|
|
Message: err.Error(),
|
|
}, nil
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
}, nil
|
|
}
|
|
|
|
// ============================================
|
|
// 测试管理接口实现
|
|
// ============================================
|
|
|
|
// GetAPITestList 获取API测试列表
|
|
func (h *AdminHandlerImpl) GetAPITestList(ctx context.Context) (*api.Response, error) {
|
|
data, err := h.testService.GetAPITestList(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// RunAPITest 执行API测试
|
|
func (h *AdminHandlerImpl) RunAPITest(ctx context.Context, req *api.APITestRequest) (*api.Response, error) {
|
|
// 获取基础URL
|
|
baseURL := "http://localhost:8080"
|
|
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
|
|
baseURL = fmt.Sprintf("http://localhost:%d", cfg.Server.Port)
|
|
}
|
|
|
|
data, err := h.testService.RunAPITest(ctx, baseURL, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// GetWSTestList 获取WebSocket测试列表
|
|
func (h *AdminHandlerImpl) GetWSTestList(ctx context.Context) (*api.Response, error) {
|
|
data, err := h.testService.GetWSTestList(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 设置WebSocket URL
|
|
wsURL := "ws://localhost:8080/v1/stream"
|
|
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
|
|
wsURL = "ws://localhost:" + string(rune(cfg.Server.Port)) + "/v1/stream"
|
|
}
|
|
data.WSURL = wsURL
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// RunWSTest 执行WebSocket测试
|
|
func (h *AdminHandlerImpl) RunWSTest(ctx context.Context, req *api.WSTestRequest) (*api.Response, error) {
|
|
// 获取WebSocket URL
|
|
wsURL := "ws://localhost:8080/v1/stream"
|
|
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
|
|
wsURL = fmt.Sprintf("ws://localhost:%d/v1/stream", cfg.Server.Port)
|
|
}
|
|
|
|
data, err := h.testService.RunWSTest(ctx, wsURL, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
// GetTestHistory 获取测试历史
|
|
func (h *AdminHandlerImpl) GetTestHistory(ctx context.Context, req *api.TestHistoryRequest) (*api.Response, error) {
|
|
data, err := h.testService.GetTestHistory(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &api.Response{
|
|
Code: 0,
|
|
Message: "success",
|
|
Data: data,
|
|
}, nil
|
|
}
|