Simple-Gin
Contents
Simple Gin
package main
import (
"fmt"
"log/slog"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
type msg struct {
Count int64 `json:"count"`
}
var pingCounter = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "ping_request_count",
Help: "No of request handled by Ping handler",
},
)
var httpReqs = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "How many HTTP requests processed, partitioned by status code and HTTP method.",
},
[]string{"code", "method"},
)
func PromHandler(handler http.Handler) gin.HandlerFunc {
return func(c *gin.Context) {
handler.ServeHTTP(c.Writer, c.Request)
}
}
func main() {
prometheus.MustRegister(pingCounter)
prometheus.MustRegister(httpReqs)
gin.SetMode(gin.ReleaseMode)
// router := gin.New()
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
httpReqs.WithLabelValues("404", "POST").Add(42)
c.JSON(200, gin.H{
"message": "pong",
})
})
router.GET("/metrics", PromHandler(promhttp.Handler()))
router.POST("/msg", func(c *gin.Context) {
d := &msg{}
pingCounter.Inc()
httpReqs.WithLabelValues("200", "GET").Add(55)
err := c.ShouldBind(d)
if err != nil {
c.JSON(200, gin.H{
"message": "err",
})
} else {
ch := make(chan int, 3)
go func() {
for i := 0; i < int(d.Count); i++ {
time.Sleep(time.Millisecond * 300)
ch <- i
fmt.Println(len(ch))
}
close(ch)
}()
for v := range ch {
slog.Info("ch", "data", v)
time.Sleep(time.Millisecond * 300)
}
c.JSON(200, gin.H{
"message": "dddd",
})
// panic("ssss")
}
})
router.Run() // 监听并在 0.0.0.0:8080 上启动服务
}