1 Star 0 Fork 0

猫科动物/go-tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
prometheus.go 2.30 KB
一键复制 编辑 原始数据 按行查看 历史
猫科动物 提交于 2025-08-01 14:28 +08:00 . 初始化
// Copyright (c) 2016-present Cloud <cloud@txthinking.com>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 3 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package prometheus
import (
"context"
"net"
"net/http"
"gitee.com/peichengchen/go-tools/brook"
pm "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
type Prometheus struct {
Server *http.Server
Tags map[string]string
}
func NewPrometheus(addr, path string, tags map[string]string) *Prometheus {
mux := http.NewServeMux()
mux.Handle(path, promhttp.Handler())
s := &http.Server{
Addr: addr,
Handler: mux,
}
return &Prometheus{Server: s, Tags: tags}
}
func (p *Prometheus) ListenAndServe() error {
return p.Server.ListenAndServe()
}
func (p *Prometheus) Shutdown() error {
return p.Server.Shutdown(context.Background())
}
func (p *Prometheus) TouchBrook() {
tags := []string{}
for k, _ := range p.Tags {
tags = append(tags, k)
}
dstc := pm.NewCounterVec(
pm.CounterOpts{
Name: "dst_counter",
Help: "Number of dst in total",
},
append([]string{"network", "from", "dst"}, tags...),
)
pm.MustRegister(dstc)
f := brook.ServerGate
brook.ServerGate = func(ex brook.Exchanger) (brook.Exchanger, error) {
from := ex.Src()
h, _, err := net.SplitHostPort(from)
if err == nil {
from = h
}
lb := pm.Labels{"network": ex.Network(), "from": from, "dst": ex.Dst()}
for k, v := range p.Tags {
lb[k] = v
}
dstc.With(lb).Inc()
return f(ex)
}
f1 := brook.ClientGate
brook.ClientGate = func(ex brook.Exchanger) (brook.Exchanger, error) {
from := ex.Src()
h, _, err := net.SplitHostPort(from)
if err == nil {
from = h
}
lb := pm.Labels{"network": ex.Network(), "from": from, "dst": ex.Dst()}
for k, v := range p.Tags {
lb[k] = v
}
dstc.With(lb).Inc()
return f1(ex)
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/peichengchen/go-tools.git
git@gitee.com:peichengchen/go-tools.git
peichengchen
go-tools
go-tools
c9eb898a551c

搜索帮助