forked from DevOps/deploy.stack
125 lines
3.4 KiB
Go
125 lines
3.4 KiB
Go
|
|
package main
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"bytes"
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"io"
|
|||
|
|
"net/http"
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// MCPRequest 定义MCP请求结构
|
|||
|
|
type MCPRequest struct {
|
|||
|
|
Data interface{} `json:"data"` Type string `json:"type"` Metadata map[string]string `json:"metadata,omitempty"` Timestamp int64 `json:"timestamp"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// MCPResponse 定义MCP响应结构
|
|||
|
|
type MCPResponse struct {
|
|||
|
|
Success bool `json:"success"` Message string `json:"message,omitempty"` Data interface{} `json:"data,omitempty"` AIResult interface{} `json:"ai_result,omitempty"` RequestID string `json:"request_id,omitempty"` Timestamp int64 `json:"timestamp"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func main() {
|
|||
|
|
// 准备测试数据
|
|||
|
|
diskData := map[string]interface{}{
|
|||
|
|
"disk_id": "sda",
|
|||
|
|
"smart_data": map[string]interface{}{
|
|||
|
|
"temperature": 38,
|
|||
|
|
"power_on_hours": 12345,
|
|||
|
|
"read_errors": 0,
|
|||
|
|
"write_errors": 0,
|
|||
|
|
"reallocated_sectors": 0,
|
|||
|
|
},
|
|||
|
|
"performance_data": map[string]interface{}{
|
|||
|
|
"read_speed": 120,
|
|||
|
|
"write_speed": 90,
|
|||
|
|
"io_wait": 0.5,
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建MCP请求
|
|||
|
|
mcpRequest := MCPRequest{
|
|||
|
|
Data: diskData,
|
|||
|
|
Type: "disk_inspection",
|
|||
|
|
Metadata: map[string]string{"server_id": "test-server", "location": "test-lab"},
|
|||
|
|
Timestamp: time.Now().Unix(),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 序列化请求数据
|
|||
|
|
jsonData, err := json.Marshal(mcpRequest)
|
|||
|
|
if err != nil {
|
|||
|
|
fmt.Printf("序列化请求数据失败: %v\n", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 发送HTTP请求到MCP服务器
|
|||
|
|
resp, err := http.Post("http://localhost:8080/mcp/v1/submit", "application/json", bytes.NewBuffer(jsonData))
|
|||
|
|
if err != nil {
|
|||
|
|
fmt.Printf("发送请求失败: %v\n", err)
|
|||
|
|
fmt.Println("请确保MCP服务器正在运行,并且监听在正确的端口上")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
defer resp.Body.Close()
|
|||
|
|
|
|||
|
|
// 读取响应
|
|||
|
|
body, err := io.ReadAll(resp.Body)
|
|||
|
|
if err != nil {
|
|||
|
|
fmt.Printf("读取响应失败: %v\n", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 打印响应状态和内容
|
|||
|
|
fmt.Printf("响应状态码: %d\n", resp.StatusCode)
|
|||
|
|
|
|||
|
|
// 如果响应成功,解析并显示详细信息
|
|||
|
|
if resp.StatusCode == http.StatusOK {
|
|||
|
|
var mcpResponse MCPResponse
|
|||
|
|
if err := json.Unmarshal(body, &mcpResponse); err != nil {
|
|||
|
|
fmt.Printf("解析响应数据失败: %v\n", err)
|
|||
|
|
fmt.Printf("原始响应内容: %s\n", string(body))
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 格式化输出响应数据
|
|||
|
|
fmt.Println("\nMCP服务器响应:")
|
|||
|
|
fmt.Printf(" 成功状态: %v\n", mcpResponse.Success)
|
|||
|
|
fmt.Printf(" 消息: %s\n", mcpResponse.Message)
|
|||
|
|
fmt.Printf(" 请求ID: %s\n", mcpResponse.RequestID)
|
|||
|
|
fmt.Printf(" 时间戳: %d (%s)\n",
|
|||
|
|
mcpResponse.Timestamp,
|
|||
|
|
time.Unix(mcpResponse.Timestamp, 0).Format("2006-01-02 15:04:05"))
|
|||
|
|
|
|||
|
|
// 输出AI分析结果(如果有)
|
|||
|
|
if mcpResponse.AIResult != nil {
|
|||
|
|
fmt.Println("\nAI分析结果:")
|
|||
|
|
aiResultJSON, _ := json.MarshalIndent(mcpResponse.AIResult, " ", " ")
|
|||
|
|
fmt.Println(string(aiResultJSON))
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
fmt.Printf("请求失败,响应内容: %s\n", string(body))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 测试健康检查接口
|
|||
|
|
testHealthCheck()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 测试健康检查接口
|
|||
|
|
func testHealthCheck() {
|
|||
|
|
fmt.Println("\n测试健康检查接口...")
|
|||
|
|
|
|||
|
|
resp, err := http.Get("http://localhost:8080/health")
|
|||
|
|
if err != nil {
|
|||
|
|
fmt.Printf("健康检查失败: %v\n", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
defer resp.Body.Close()
|
|||
|
|
|
|||
|
|
body, err := io.ReadAll(resp.Body)
|
|||
|
|
if err != nil {
|
|||
|
|
fmt.Printf("读取健康检查响应失败: %v\n", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fmt.Printf("健康检查状态码: %d\n", resp.StatusCode)
|
|||
|
|
fmt.Printf("健康检查响应: %s\n", string(body))
|
|||
|
|
}
|