mirror of
https://github.com/wahyd4/badger.git
synced 2026-08-09 05:15:58 +10:00
Add support for multiple color scheme
This commit is contained in:
+33
-6
@@ -39,9 +39,9 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
ColorSchemeGreen = "fill-opacity:1.00; fill:rgb(49, 197, 83);"
|
||||
ColorSchemeOrange = "fill-opacity:1.00; fill:rgb(255, 87, 34);"
|
||||
ColorSchemeBlue = "fill-opacity:1.00; fill:rgb(32, 99, 155);"
|
||||
ColorSchemeGreen = ColorScheme("fill-opacity:1.00; fill:rgb(49, 197, 83);")
|
||||
ColorSchemeOrange = ColorScheme("fill-opacity:1.00; fill:rgb(255, 87, 34);")
|
||||
ColorSchemeBlue = ColorScheme("fill-opacity:1.00; fill:rgb(32, 99, 155);")
|
||||
BadgeTypePrometheus = "PROMETHEUS"
|
||||
pageViewsLabel = "Page Views"
|
||||
radius = 0
|
||||
@@ -67,8 +67,10 @@ type BadgesHandler struct {
|
||||
PrometheusAPIClient api.Client
|
||||
}
|
||||
|
||||
type ColorScheme string
|
||||
|
||||
func (handler *BadgesHandler) GetBadge(c *gin.Context) {
|
||||
if err := handler.generateSVG(c); err != nil {
|
||||
if err := handler.generateSVG(c, ColorSchemeGreen); err != nil {
|
||||
logrus.Error(err)
|
||||
if err == ErrNoSuchBadgeFound {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
|
||||
@@ -79,7 +81,32 @@ func (handler *BadgesHandler) GetBadge(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func (handler *BadgesHandler) generateSVG(c *gin.Context) error {
|
||||
func (handler *BadgesHandler) GetBadgeWithColorScheme(c *gin.Context) {
|
||||
color := c.Param("color")
|
||||
var colorScheme ColorScheme
|
||||
switch color {
|
||||
case "green.svg":
|
||||
colorScheme = ColorSchemeGreen
|
||||
case "orange.svg":
|
||||
colorScheme = ColorSchemeOrange
|
||||
case "blue.svg":
|
||||
colorScheme = ColorSchemeBlue
|
||||
default:
|
||||
colorScheme = ColorSchemeGreen
|
||||
}
|
||||
|
||||
if err := handler.generateSVG(c, colorScheme); err != nil {
|
||||
logrus.Error(err)
|
||||
if err == ErrNoSuchBadgeFound {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": ErrorMessageInternalError})
|
||||
}
|
||||
}
|
||||
|
||||
func (handler *BadgesHandler) generateSVG(c *gin.Context, colorScheme ColorScheme) error {
|
||||
startTime := time.Now()
|
||||
|
||||
queryName := c.Param("name")
|
||||
@@ -122,7 +149,7 @@ func (handler *BadgesHandler) generateSVG(c *gin.Context) error {
|
||||
|
||||
//labelContainerWidth := len(metric.Label)*fontSize + textMarginX
|
||||
|
||||
canvas.Rect(0, 0, int(labelContainerWidth), badgeHeight, string(ColorSchemeGreen))
|
||||
canvas.Rect(0, 0, int(labelContainerWidth), badgeHeight, string(colorScheme))
|
||||
|
||||
//when there is metric label then use default label
|
||||
if len(prometheusOptions.ValueField) == 0 {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
@@ -9,7 +8,6 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/jinzhu/gorm/dialects/postgres"
|
||||
_ "github.com/jinzhu/gorm/dialects/postgres"
|
||||
"github.com/prometheus/client_golang/api"
|
||||
"github.com/wahyd4/badger/handlers"
|
||||
@@ -22,20 +20,6 @@ import (
|
||||
|
||||
type ColorScheme string
|
||||
|
||||
var (
|
||||
queriesMap = map[string]queryParam{
|
||||
"mel": {Color: handlers.ColorSchemeGreen, Query: "air_index_iaqi_pm25_v{city_name=\"Melbourne CBD\"}", ValueField: "city_name"},
|
||||
"chengdu": {Color: handlers.ColorSchemeGreen, Query: "air_index_iaqi_pm25_v{city_name=\"Chengdu (成都)\"}", ValueField: "city_name"},
|
||||
"dockerhub": {Color: handlers.ColorSchemeGreen, Query: "docker_hub_pull_count{name=\"aria2-ui\"}", ValueField: "name"},
|
||||
"github": {Color: handlers.ColorSchemeGreen, Query: "github_repository_stars{name=\"aria2-ariang-docker\"}", ValueField: "name"},
|
||||
"badge-requests-count": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total[500d])))", Label: "Badge Req Count"},
|
||||
"junv-github-profile": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total{badge=\"junv-github-profile\"}[500d])))", Label: "Page Views"},
|
||||
"aria2-ariang-docker": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total{badge=\"aria2-ariang-docker\"}[500d])))", Label: "Page Views"},
|
||||
"aria2-ariang-x-docker-compose": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total{badge=\"aria2-ariang-x-docker-compose\"}[500d])))", Label: "Page Views"},
|
||||
"work-in-australia": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total{badge=\"work-in-australia\"}[500d])))", Label: "Page Views"},
|
||||
"aria-ui-dockerhub": {Color: handlers.ColorSchemeBlue, Query: "ceil(sum(increase(badge_requested_total{badge=\"aria-ui-dockerhub\"}[500d])))", Label: "Page Views"},
|
||||
}
|
||||
)
|
||||
|
||||
type queryParam struct {
|
||||
Color ColorScheme
|
||||
@@ -89,6 +73,8 @@ func main() {
|
||||
|
||||
r.GET("/svg/:name", handler.GetBadge)
|
||||
|
||||
r.GET("/badges/:name/:color", handler.GetBadgeWithColorScheme)
|
||||
|
||||
r.StaticFile("/favicon.ico", "static/favicon.ico")
|
||||
r.StaticFile("/robots.txt", "static/robots.txt")
|
||||
|
||||
@@ -102,7 +88,6 @@ func main() {
|
||||
logrus.Error(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
}()
|
||||
|
||||
log.Fatal(r.Run())
|
||||
@@ -114,27 +99,4 @@ func getEnvWithDefault(key, defaultValue string) string {
|
||||
return val
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func importMaps(db *gorm.DB) {
|
||||
for key, value := range queriesMap {
|
||||
jsonB := new(postgres.Jsonb)
|
||||
options := models.PrometheusOptions{
|
||||
ValueField: value.ValueField,
|
||||
Query: value.Query,
|
||||
}
|
||||
bytes, err := json.Marshal(&options)
|
||||
if err != nil {
|
||||
logrus.Errorf("failed to marshal option to bytes %w", err)
|
||||
}
|
||||
if err = jsonB.Scan(bytes); err != nil {
|
||||
logrus.Error(err.Error())
|
||||
}
|
||||
db.Save(&models.Badge{
|
||||
Label: value.Label,
|
||||
ULID: key,
|
||||
Type: handlers.BadgeTypePrometheus,
|
||||
Options: jsonB,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user