mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 07:50:25 +08:00
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
|
package esi
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"mayfly-go/internal/machine/mcm"
|
|||
|
|
"mayfly-go/pkg/logx"
|
|||
|
|
"net/http"
|
|||
|
|
"net/http/httputil"
|
|||
|
|
"net/url"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type EsConn struct {
|
|||
|
|
Id uint64
|
|||
|
|
Info *EsInfo
|
|||
|
|
|
|||
|
|
proxy *httputil.ReverseProxy
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// StartProxy 开始代理
|
|||
|
|
func (d *EsConn) StartProxy() error {
|
|||
|
|
// 目标 URL
|
|||
|
|
targetURL, err := url.Parse(d.Info.baseUrl)
|
|||
|
|
if err != nil {
|
|||
|
|
logx.Errorf("Error parsing URL: %v", err)
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
// 创建反向代理
|
|||
|
|
d.proxy = httputil.NewSingleHostReverseProxy(targetURL)
|
|||
|
|
// 设置 proxy buffer pool
|
|||
|
|
d.proxy.BufferPool = NewBufferPool()
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (d *EsConn) Proxy(w http.ResponseWriter, r *http.Request, path string) {
|
|||
|
|
r.URL.Path = path
|
|||
|
|
if d.Info.authorization != "" {
|
|||
|
|
r.Header.Set("Authorization", d.Info.authorization)
|
|||
|
|
}
|
|||
|
|
r.Header.Set("connection", "keep-alive")
|
|||
|
|
r.Header.Set("Accept", "application/json")
|
|||
|
|
d.proxy.ServeHTTP(w, r)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (d *EsConn) Close() error {
|
|||
|
|
// 如果是使用了ssh隧道转发,则需要手动将其关闭
|
|||
|
|
if d.Info.useSshTunnel {
|
|||
|
|
mcm.CloseSshTunnelMachine(uint64(d.Info.SshTunnelMachineId), fmt.Sprintf("es:%d", d.Id))
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (d *EsConn) Ping() error {
|
|||
|
|
_, err := d.Info.Ping()
|
|||
|
|
return err
|
|||
|
|
}
|