From 61d3fe495bdcbbd2bb8d186e2ea003ef8f796183 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Tue, 4 Aug 2020 15:16:32 +1000 Subject: [PATCH] Add page view count metric --- main.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index c2c6faa..f0a74a6 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "fmt" "image/color" "log" @@ -35,18 +36,20 @@ const ( ) var ( - queriesMap = map[string]queryParam{ + ErrNoSuchBadgeFound = errors.New("no such badge can be found, please make sure you have provided the correct information") + queriesMap = map[string]queryParam{ "mel": {Color: color.RGBA{49, 197, 83, 255}, Query: "air_index_iaqi_pm25_v{city_name=\"Melbourne CBD\"}", ValueField: "city_name"}, "chengdu": {Color: color.RGBA{49, 197, 83, 255}, Query: "air_index_iaqi_pm25_v{city_name=\"Chengdu (成都)\"}", ValueField: "city_name"}, "dockerhub": {Color: color.RGBA{60, 174, 163, 255}, Query: "docker_hub_pull_count{name=\"aria2-ui\"}", ValueField: "name"}, "github": {Color: color.RGBA{32, 99, 155, 255}, Query: "github_repository_stars{name=\"aria2-ariang-docker\"}", ValueField: "name"}, "badge-requests-count": {Color: color.RGBA{32, 99, 155, 255}, Query: "ceil(sum(increase(badge_requested_total[500d])))", Label: "Badge Req Count"}, + "junv-github-profile": {Color: color.RGBA{32, 99, 155, 255}, Query: "ceil(sum(increase(badge_requested_total{badge=\"junv-github-profile\"}[500d])))", Label: "Page Views Count"}, } - badgeRequested = promauto.NewCounter(prometheus.CounterOpts{ + badgeRequested = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "badge_requested_total", Help: "The total request number of badges", - }) + }, []string{"badge"}) badgeGenerationTime = promauto.NewHistogram(prometheus.HistogramOpts{ Name: "badge_generation_time", @@ -89,6 +92,12 @@ func main() { r.GET("/svg/:name", func(c *gin.Context) { if err := generateSVG(client, c); err != nil { fmt.Println(err.Error()) + if err == ErrNoSuchBadgeFound { + c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusInternalServerError, gin.H{"error": "please try it again"}) } }) @@ -112,7 +121,7 @@ func generateSVG(client api.Client, c *gin.Context) error { queryName := c.Param("name") query, ok := queriesMap[queryName] if !ok { - query = queriesMap["mel"] + return ErrNoSuchBadgeFound } metric := queryMetric(client, query) @@ -141,7 +150,7 @@ func generateSVG(client api.Client, c *gin.Context) error { canvas.Text(badgeWidth*0.7, 15, valueText, textStyle) canvas.End() badgeGenerationTime.Observe(float64(time.Now().Sub(startTime).Microseconds())) - badgeRequested.Inc() + badgeRequested.With(map[string]string{"badge": queryName}).Inc() return nil }