Skip to content

Commit 89dd332

Browse files
authored
Merge pull request #90 from JaD1ng/feat/issue80
feat(prometheus_adapter): 新增prometheus_adapter实现指标查询功能
2 parents 9a094d9 + 4555e06 commit 89dd332

File tree

40 files changed

+3986
-216
lines changed

40 files changed

+3986
-216
lines changed

cmd/prometheus_adapter/main.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"os"
6+
"os/signal"
7+
"syscall"
8+
"time"
9+
10+
"github.com/fox-gonic/fox"
11+
"github.com/qiniu/zeroops/internal/config"
12+
prometheusadapter "github.com/qiniu/zeroops/internal/prometheus_adapter"
13+
"github.com/rs/zerolog"
14+
"github.com/rs/zerolog/log"
15+
)
16+
17+
func main() {
18+
// 配置日志
19+
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
20+
21+
log.Info().Msg("Starting Prometheus Adapter server")
22+
23+
// 加载 Prometheus Adapter 配置
24+
adapter, err := prometheusadapter.NewPrometheusAdapterServer(&config.Config{})
25+
if err != nil {
26+
log.Fatal().Err(err).Msg("Failed to create Prometheus Adapter server")
27+
}
28+
29+
// 获取 Prometheus Adapter 内部配置的绑定地址
30+
bindAddr := ":9999" // 默认端口
31+
if adapter.GetBindAddr() != "" {
32+
bindAddr = adapter.GetBindAddr()
33+
}
34+
35+
// 如果有环境变量,优先使用环境变量的端口
36+
if port := os.Getenv("ADAPTER_PORT"); port != "" {
37+
bindAddr = ":" + port
38+
}
39+
40+
// 更新配置(虽然已经创建了 adapter,但需要端口信息用于启动服务器)
41+
cfg := &config.Config{
42+
Server: config.ServerConfig{
43+
BindAddr: bindAddr,
44+
},
45+
}
46+
47+
// 创建路由
48+
router := fox.New()
49+
50+
// 启动 API
51+
if err := adapter.UseApi(router); err != nil {
52+
log.Fatal().Err(err).Msg("Failed to setup API routes")
53+
}
54+
55+
// 设置信号处理
56+
sigChan := make(chan os.Signal, 1)
57+
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
58+
59+
// 创建一个用于优雅关闭的context
60+
ctx, cancel := context.WithCancel(context.Background())
61+
defer cancel()
62+
63+
// 在goroutine中启动服务器
64+
serverErr := make(chan error, 1)
65+
go func() {
66+
log.Info().Msgf("Starting Prometheus Adapter on %s", cfg.Server.BindAddr)
67+
if err := router.Run(cfg.Server.BindAddr); err != nil {
68+
serverErr <- err
69+
}
70+
}()
71+
72+
// 等待信号或服务器错误
73+
select {
74+
case sig := <-sigChan:
75+
log.Info().Msgf("Received signal %s, shutting down...", sig)
76+
77+
// 创建超时context
78+
shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 10*time.Second)
79+
defer shutdownCancel()
80+
81+
// 调用adapter的Shutdown方法
82+
if err := adapter.Close(shutdownCtx); err != nil {
83+
log.Error().Err(err).Msg("Error during shutdown")
84+
}
85+
86+
log.Info().Msg("Shutdown complete")
87+
88+
case err := <-serverErr:
89+
log.Fatal().Err(err).Msg("Server error")
90+
}
91+
}

0 commit comments

Comments
 (0)