Add support for multiple color scheme

This commit is contained in:
2020-08-23 17:50:27 +10:00
parent d81a543d9d
commit bb541c73cf
2 changed files with 36 additions and 47 deletions
+33 -6
View File
@@ -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 {
+3 -41
View File
@@ -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,
})
}
}
}