使用go写了一个简单的http接口
使用go写了一个简单的http接口
package main
import (
"fmt"
"net/http"
"os/exec"
"sync"
"time"
)
var (
requestCount int
lastTimestamp time.Time
mu sync.Mutex
)
const (
maxRequests = 30
resetDuration = time.Minute
)
// 假设 metricsData 是一个全局变量
var metricsData string
func ExecMatrixcmd(opera, ip string) string {
exec_matrixcmd := "/home/work/matrix/matrix-cli/matrix"
var execcmd string
if opera == "add" {
execcmd = "props_add"
cmd := exec.Command(exec_matrixcmd, "host", execcmd, ip, `{"EKS_CLUSTER_SYMBOL": "k8s-1"}`)
fmt.Println(cmd)
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Sprintf("发生错误:%v", err)
}
return string(output)
} else if opera == "remove" {
execcmd = "props_remove"
cmd := exec.Command(exec_matrixcmd, "host", execcmd, ip, "EKS_CLUSTER_SYMBOL")
fmt.Println(cmd)
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Sprintf("发生错误:%v", err)
}
return string(output)
} else {
return "Invalid operation"
}
// cmd := exec.Command(exec_matrixcmd, "host", execcmd, ip, `{"EKS_CLUSTER_SYMBOL": "k8s-1"}`)
}
func matrixcmdHandler(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
now := time.Now()
if now.Sub(lastTimestamp) > resetDuration {
requestCount = 0
lastTimestamp = now
}
if requestCount >= maxRequests {
http.Error(w, "请求频率过高", http.StatusTooManyRequests)
return
}
requestCount++
// 获取名为 "opera" 的 URL 参数
opera := r.URL.Query().Get("opera")
// 获取名为 "ip" 的 URL 参数
ip := r.URL.Query().Get("ip")
if opera == "add" {
// 执行相关操作
result := ExecMatrixcmd("add", ip)
w.Header().Set("Content-Type", "text/plain")
fmt.Fprint(w, result)
} else if opera == "remove" {
// 执行相关操作
result := ExecMatrixcmd("remove", ip)
w.Header().Set("Content-Type", "text/plain")
fmt.Fprint(w, result)
} else {
http.Error(w, "无效的操作类型", http.StatusBadRequest)
}
}
func main() {
http.HandleFunc("/api/v1/matrix/", matrixcmdHandler)
port := 5119
fmt.Printf("服务器正在运行,地址:http://0.0.0.0:%d\n", port)
err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
if err != nil {
fmt.Printf("启动服务器时发生错误:%v\n", err)
}
}
接口访问:
curl "http://xxxxxxxxxxxx:5119/api/v1/matrix/?opera=${add|remove}&ip=xx.xx.xx.xx"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)