From 19ed2a66e8fd10ec9cee1580b92d3ff7f8ac7ebd Mon Sep 17 00:00:00 2001
From: Pulkit Kathuria
Date: Thu, 28 Dec 2023 20:34:24 +0900
Subject: [PATCH 1/3] (feat) reafactored handlers by moving printer logic to
pkg classes
---
pkg/bar_chart.go | 85 ++++++++++++++++++++++++++++++++++++++
pkg/bar_chart_handler.go | 74 ++-------------------------------
pkg/chart.go | 8 ++++
pkg/donut_chart.go | 20 +++++++--
pkg/donut_chart_handler.go | 16 +------
pkg/line_chart.go | 58 ++++++++++++++++++++++++++
pkg/line_chart_handler.go | 52 +----------------------
pkg/pie_chart.go | 39 ++++++++++++++---
pkg/pie_chart_handler.go | 28 +------------
pkg/radar_chart.go | 36 ++++++++++++++++
pkg/radar_chart_handler.go | 38 ++---------------
pkg/routes.go | 33 +++++++++++----
12 files changed, 273 insertions(+), 214 deletions(-)
diff --git a/pkg/bar_chart.go b/pkg/bar_chart.go
index 1bda913..5076b4f 100644
--- a/pkg/bar_chart.go
+++ b/pkg/bar_chart.go
@@ -1,5 +1,13 @@
package pkg
+import (
+ "fmt"
+ "net/http"
+
+ "github.com/labstack/echo/v4"
+ charts "github.com/vicanso/go-charts/v2"
+)
+
type BarChart struct {
chart *Chart
}
@@ -9,3 +17,80 @@ func NewBarChart() *BarChart {
chart: NewChart(),
}
}
+
+func (c *BarChart) GetVertical(xData []string, yData [][]float64, names []string, req *ChartRequest) ([]byte, error) {
+ p, err := charts.BarRender(
+ yData,
+ charts.TitleOptionFunc(charts.TitleOption{
+ Text: req.ChartTitle,
+ Subtext: req.ChartSubtitle,
+ SubtextFontSize: DEFAULT_SUBTITLE_FONT_SIZE,
+ Left: charts.PositionCenter,
+ }),
+ charts.HeightOptionFunc(req.Height),
+ charts.WidthOptionFunc(req.Width),
+ charts.XAxisDataOptionFunc(xData),
+ charts.LegendOptionFunc(charts.LegendOption{
+ Orient: charts.OrientVertical,
+ Data: names,
+ Left: charts.PositionLeft,
+ }),
+ charts.MarkLineOptionFunc(0, charts.SeriesMarkDataTypeAverage),
+ charts.MarkPointOptionFunc(0, charts.SeriesMarkDataTypeMax,
+ charts.SeriesMarkDataTypeMin),
+ func(opt *charts.ChartOption) {
+ opt.Theme = req.Theme
+ opt.ValueFormatter = func(f float64) string {
+ return fmt.Sprintf("%.0f%s", f, req.Metric)
+ }
+ idx := len(opt.SeriesList) - 1
+ if len(opt.SeriesList) > 1 {
+ idx = 1
+ }
+ opt.SeriesList[idx].MarkPoint = charts.NewMarkPoint(
+ charts.SeriesMarkDataTypeMax,
+ charts.SeriesMarkDataTypeMin,
+ )
+ opt.SeriesList[idx].MarkLine = charts.NewMarkLine(
+ charts.SeriesMarkDataTypeAverage,
+ )
+ },
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ buf, err := p.Bytes()
+ if err != nil {
+ return nil, err
+ }
+ return buf, err
+}
+
+func (c *BarChart) GetHorizontal(xData []string, yData [][]float64, names []string, req *ChartRequest) ([]byte, error) {
+ p, err := charts.HorizontalBarRender(
+ yData,
+ charts.TitleOptionFunc(charts.TitleOption{
+ Text: req.ChartTitle,
+ Subtext: req.ChartSubtitle,
+ SubtextFontSize: DEFAULT_SUBTITLE_FONT_SIZE,
+ Left: charts.PositionCenter,
+ }),
+ charts.HeightOptionFunc(req.Height),
+ charts.WidthOptionFunc(req.Width),
+ charts.YAxisDataOptionFunc(xData),
+ func(opt *charts.ChartOption) {
+ opt.Theme = req.Theme
+ opt.ValueFormatter = func(f float64) string {
+ return fmt.Sprintf("%.0f%s", f, req.Metric)
+ }
+ },
+ )
+
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
+ }
+
+ buf, err := p.Bytes()
+ return buf, err
+}
diff --git a/pkg/bar_chart_handler.go b/pkg/bar_chart_handler.go
index 6cf8f54..0cf0d9f 100644
--- a/pkg/bar_chart_handler.go
+++ b/pkg/bar_chart_handler.go
@@ -2,11 +2,9 @@ package pkg
import (
"encoding/json"
- "fmt"
"net/http"
"github.com/labstack/echo/v4"
- charts "github.com/vicanso/go-charts/v2"
)
type BarChartHandler struct {
@@ -45,76 +43,10 @@ func (h *BarChartHandler) Get(c echo.Context) ([]byte, error) {
}
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
-
+ SetHeaders(c.Response().Header())
if !req.Horizontal {
- p, err := charts.BarRender(
- data.YData,
- charts.TitleOptionFunc(charts.TitleOption{
- Text: req.ChartTitle,
- Subtext: req.ChartSubtitle,
- SubtextFontSize: 9,
- Left: charts.PositionCenter,
- }),
- charts.HeightOptionFunc(req.Height),
- charts.WidthOptionFunc(req.Width),
- charts.XAxisDataOptionFunc(data.XData),
- charts.LegendOptionFunc(charts.LegendOption{
- Orient: charts.OrientVertical,
- Data: data.Names,
- Left: charts.PositionLeft,
- }),
- charts.MarkLineOptionFunc(0, charts.SeriesMarkDataTypeAverage),
- charts.MarkPointOptionFunc(0, charts.SeriesMarkDataTypeMax,
- charts.SeriesMarkDataTypeMin),
- func(opt *charts.ChartOption) {
- opt.Theme = req.Theme
- opt.ValueFormatter = func(f float64) string {
- return fmt.Sprintf("%.0f%s", f, req.Metric)
- }
- idx := len(opt.SeriesList) - 1
- if len(opt.SeriesList) > 1 {
- idx = 1
- }
- opt.SeriesList[idx].MarkPoint = charts.NewMarkPoint(
- charts.SeriesMarkDataTypeMax,
- charts.SeriesMarkDataTypeMin,
- )
- opt.SeriesList[idx].MarkLine = charts.NewMarkLine(
- charts.SeriesMarkDataTypeAverage,
- )
- },
- )
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
- buf, err := p.Bytes()
- return buf, err
+ return h.chart.GetVertical(data.XData, data.YData, data.Names, req)
}
- p, err := charts.HorizontalBarRender(
- data.YData,
- charts.TitleOptionFunc(charts.TitleOption{
- Text: req.ChartTitle,
- Subtext: req.ChartSubtitle,
- SubtextFontSize: 9,
- Left: charts.PositionCenter,
- }),
- charts.HeightOptionFunc(req.Height),
- charts.WidthOptionFunc(req.Width),
- charts.YAxisDataOptionFunc(data.XData),
- func(opt *charts.ChartOption) {
- opt.Theme = req.Theme
- opt.ValueFormatter = func(f float64) string {
- return fmt.Sprintf("%.0f%s", f, req.Metric)
- }
- },
- )
-
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
-
- buf, err := p.Bytes()
- SetHeaders(c.Response().Header())
- return buf, err
+ return h.chart.GetHorizontal(data.XData, data.YData, data.Names, req)
}
diff --git a/pkg/chart.go b/pkg/chart.go
index 77dee54..9eb3d25 100644
--- a/pkg/chart.go
+++ b/pkg/chart.go
@@ -4,6 +4,14 @@ import (
"net/http"
)
+const (
+ DEFAULT_PADDING_TOP = 20
+ DEFAULT_PADDING_RIGHT = 20
+ DEFAULT_PADDING_BOTTOM = 20
+ DEFAULT_PADDING_LEFT = 20
+ DEFAULT_SUBTITLE_FONT_SIZE = 9
+)
+
type Chart struct {
}
diff --git a/pkg/donut_chart.go b/pkg/donut_chart.go
index be9e92b..5b25112 100644
--- a/pkg/donut_chart.go
+++ b/pkg/donut_chart.go
@@ -1,6 +1,10 @@
package pkg
-import "github.com/wcharczuk/go-chart/v2"
+import (
+ "bytes"
+
+ "github.com/wcharczuk/go-chart/v2"
+)
type DonutChart struct {
chart *Chart
@@ -11,7 +15,8 @@ func NewDonutChart() *DonutChart {
chart: NewChart(),
}
}
-func (c *DonutChart) GetValues(names []string, values []float64) []chart.Value {
+
+func (c *DonutChart) Get(values []float64, names []string, req *ChartRequest) ([]byte, error) {
var chartValues []chart.Value
for i := 0; i < len(names); i++ {
chartValues = append(chartValues, chart.Value{
@@ -19,5 +24,14 @@ func (c *DonutChart) GetValues(names []string, values []float64) []chart.Value {
Label: names[i],
})
}
- return chartValues
+ graph := chart.DonutChart{
+ Title: req.ChartTitle,
+ Height: req.Height,
+ Width: req.Width,
+ Values: chartValues,
+ }
+
+ buffer := bytes.NewBuffer([]byte{})
+ err := graph.Render(chart.PNG, buffer)
+ return buffer.Bytes(), err
}
diff --git a/pkg/donut_chart_handler.go b/pkg/donut_chart_handler.go
index 1d5164f..cf83920 100644
--- a/pkg/donut_chart_handler.go
+++ b/pkg/donut_chart_handler.go
@@ -1,12 +1,10 @@
package pkg
import (
- "bytes"
"encoding/json"
"net/http"
"github.com/labstack/echo/v4"
- "github.com/wcharczuk/go-chart/v2"
)
type DonutChartHandler struct {
@@ -45,18 +43,6 @@ func (h *DonutChartHandler) Get(c echo.Context) ([]byte, error) {
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
- graph := chart.DonutChart{
- Title: req.ChartTitle,
- Height: req.Height,
- Width: req.Width,
- Values: h.chart.GetValues(data.Names, data.Values),
- }
-
- buffer := bytes.NewBuffer([]byte{})
- err := graph.Render(chart.PNG, buffer)
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
SetHeaders(c.Response().Header())
- return buffer.Bytes(), err
+ return h.chart.Get(data.Values, data.Names, req)
}
diff --git a/pkg/line_chart.go b/pkg/line_chart.go
index 4916103..ac44527 100644
--- a/pkg/line_chart.go
+++ b/pkg/line_chart.go
@@ -1,5 +1,11 @@
package pkg
+import (
+ "fmt"
+
+ charts "github.com/vicanso/go-charts/v2"
+)
+
type LineChart struct {
chart *Chart
}
@@ -9,3 +15,55 @@ func NewLineChart() *LineChart {
chart: NewChart(),
}
}
+
+func (c *LineChart) Get(xData [][]string, yData [][]float64, names []string, req *ChartRequest) ([]byte, error) {
+ p, err := charts.LineRender(
+ yData,
+ charts.HeightOptionFunc(req.Height),
+ charts.WidthOptionFunc(req.Width),
+ charts.TitleOptionFunc(charts.TitleOption{
+ Text: req.ChartTitle,
+ Subtext: req.ChartSubtitle,
+ SubtextFontSize: DEFAULT_SUBTITLE_FONT_SIZE,
+ Left: charts.PositionCenter,
+ }),
+ charts.XAxisDataOptionFunc(xData[0]),
+ charts.LegendOptionFunc(charts.LegendOption{
+ Orient: charts.OrientVertical,
+ Data: names,
+ Left: charts.PositionLeft,
+ }),
+ func(opt *charts.ChartOption) {
+ opt.Theme = req.Theme
+ opt.Legend.Padding = charts.Box{
+ Top: DEFAULT_PADDING_TOP,
+ Bottom: DEFAULT_PADDING_BOTTOM,
+ }
+ opt.ValueFormatter = func(f float64) string {
+ return fmt.Sprintf("%.0f%s", f, req.Metric)
+ }
+ opt.FillArea = req.Fill
+
+ idx := len(opt.SeriesList) - 1
+ if len(opt.SeriesList) > 1 {
+ idx = 1
+ }
+ opt.SeriesList[idx].MarkPoint = charts.NewMarkPoint(
+ charts.SeriesMarkDataTypeMax,
+ charts.SeriesMarkDataTypeMin,
+ )
+ opt.SeriesList[idx].MarkLine = charts.NewMarkLine(
+ charts.SeriesMarkDataTypeAverage,
+ )
+ },
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ buf, err := p.Bytes()
+ if err != nil {
+ return nil, err
+ }
+ return buf, err
+}
diff --git a/pkg/line_chart_handler.go b/pkg/line_chart_handler.go
index bf62154..ad66dcd 100644
--- a/pkg/line_chart_handler.go
+++ b/pkg/line_chart_handler.go
@@ -2,11 +2,9 @@ package pkg
import (
"encoding/json"
- "fmt"
"net/http"
"github.com/labstack/echo/v4"
- charts "github.com/vicanso/go-charts/v2"
)
type LineChartHandler struct {
@@ -38,55 +36,7 @@ func (h *LineChartHandler) Get(c echo.Context) ([]byte, error) {
}
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
- p, err := charts.LineRender(
- data.YData,
- charts.HeightOptionFunc(req.Height),
- charts.WidthOptionFunc(req.Width),
- charts.TitleOptionFunc(charts.TitleOption{
- Text: req.ChartTitle,
- Subtext: req.ChartSubtitle,
- SubtextFontSize: 9,
- Left: charts.PositionCenter,
- }),
- charts.XAxisDataOptionFunc(data.XData[0]),
- charts.LegendOptionFunc(charts.LegendOption{
- Orient: charts.OrientVertical,
- Data: data.Names,
- Left: charts.PositionLeft,
- }),
- func(opt *charts.ChartOption) {
- opt.Theme = req.Theme
- opt.Legend.Padding = charts.Box{
- Top: 25,
- Bottom: 25,
- }
- opt.ValueFormatter = func(f float64) string {
- return fmt.Sprintf("%.0f%s", f, req.Metric)
- }
- opt.FillArea = req.Fill
- idx := len(opt.SeriesList) - 1
- if len(opt.SeriesList) > 1 {
- idx = 1
- }
- opt.SeriesList[idx].MarkPoint = charts.NewMarkPoint(
- charts.SeriesMarkDataTypeMax,
- charts.SeriesMarkDataTypeMin,
- )
- opt.SeriesList[idx].MarkLine = charts.NewMarkLine(
- charts.SeriesMarkDataTypeAverage,
- )
- },
- )
-
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
-
- buf, err := p.Bytes()
- if err != nil {
- return nil, err
- }
SetHeaders(c.Response().Header())
- return buf, err
+ return h.chart.Get(data.XData, data.YData, data.Names, req)
}
diff --git a/pkg/pie_chart.go b/pkg/pie_chart.go
index 6f4e356..bf6f976 100644
--- a/pkg/pie_chart.go
+++ b/pkg/pie_chart.go
@@ -13,11 +13,38 @@ func NewPieChart() *PieChart {
chart: NewChart(),
}
}
-func (c *PieChart) GetPadding() charts.Box {
- return charts.Box{
- Top: 20,
- Right: 20,
- Bottom: 20,
- Left: 20,
+
+func (c *PieChart) Get(values []float64, names []string, req *ChartRequest) ([]byte, error) {
+ p, err := charts.PieRender(
+ values,
+ charts.TitleOptionFunc(charts.TitleOption{
+ Text: req.ChartTitle,
+ Subtext: req.ChartSubtitle,
+ SubtextFontSize: DEFAULT_SUBTITLE_FONT_SIZE,
+ Left: charts.PositionCenter,
+ }),
+ charts.HeightOptionFunc(req.Height),
+ charts.WidthOptionFunc(req.Width),
+ charts.PaddingOptionFunc(charts.Box{
+ Top: DEFAULT_PADDING_TOP,
+ Right: DEFAULT_PADDING_RIGHT,
+ Bottom: DEFAULT_PADDING_BOTTOM,
+ Left: DEFAULT_PADDING_LEFT,
+ }),
+ charts.LegendOptionFunc(charts.LegendOption{
+ Orient: charts.OrientVertical,
+ Data: names,
+ Left: charts.PositionLeft,
+ }),
+ charts.PieSeriesShowLabel(),
+ func(opt *charts.ChartOption) {
+ opt.Theme = req.Theme
+ },
+ )
+ if err != nil {
+ return nil, err
}
+
+ buf, err := p.Bytes()
+ return buf, err
}
diff --git a/pkg/pie_chart_handler.go b/pkg/pie_chart_handler.go
index 28f8197..cabb6da 100644
--- a/pkg/pie_chart_handler.go
+++ b/pkg/pie_chart_handler.go
@@ -5,7 +5,6 @@ import (
"net/http"
"github.com/labstack/echo/v4"
- charts "github.com/vicanso/go-charts/v2"
)
type PieChartHandler struct {
@@ -44,32 +43,7 @@ func (h *PieChartHandler) Get(c echo.Context) ([]byte, error) {
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
- p, err := charts.PieRender(
- data.Values,
- charts.TitleOptionFunc(charts.TitleOption{
- Text: req.ChartTitle,
- Subtext: req.ChartSubtitle,
- SubtextFontSize: 9,
- Left: charts.PositionCenter,
- }),
- charts.HeightOptionFunc(req.Height),
- charts.WidthOptionFunc(req.Width),
- charts.PaddingOptionFunc(h.chart.GetPadding()),
- charts.LegendOptionFunc(charts.LegendOption{
- Orient: charts.OrientVertical,
- Data: data.Names,
- Left: charts.PositionLeft,
- }),
- charts.PieSeriesShowLabel(),
- func(opt *charts.ChartOption) {
- opt.Theme = req.Theme
- },
- )
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
-
- buf, err := p.Bytes()
+ buf, err := h.chart.Get(data.Values, data.Names, req)
SetHeaders(c.Response().Header())
return buf, err
}
diff --git a/pkg/radar_chart.go b/pkg/radar_chart.go
index 33609d5..4b39759 100644
--- a/pkg/radar_chart.go
+++ b/pkg/radar_chart.go
@@ -1,5 +1,12 @@
package pkg
+import (
+ "net/http"
+
+ "github.com/labstack/echo/v4"
+ charts "github.com/vicanso/go-charts/v2"
+)
+
type RadarChart struct {
}
@@ -26,3 +33,32 @@ func (c *RadarChart) GetIndicators(values [][]float64) []float64 {
}
return maxValues
}
+
+func (c *RadarChart) Get(values [][]float64, names []string, labels []string, req *ChartRequest) ([]byte, error) {
+ p, err := charts.RadarRender(
+ values,
+ charts.TitleOptionFunc(charts.TitleOption{
+ Text: req.ChartTitle,
+ Subtext: req.ChartSubtitle,
+ SubtextFontSize: DEFAULT_SUBTITLE_FONT_SIZE,
+ Left: charts.PositionCenter,
+ }),
+ charts.HeightOptionFunc(req.Height),
+ charts.WidthOptionFunc(req.Width),
+ charts.LegendOptionFunc(charts.LegendOption{
+ Orient: charts.OrientVertical,
+ Data: labels,
+ Left: charts.PositionLeft,
+ }),
+ charts.RadarIndicatorOptionFunc(names, c.GetIndicators(values)),
+ func(opt *charts.ChartOption) {
+ opt.Theme = req.Theme
+ },
+ )
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
+ }
+
+ buf, err := p.Bytes()
+ return buf, err
+}
diff --git a/pkg/radar_chart_handler.go b/pkg/radar_chart_handler.go
index 81acd58..06bcc01 100644
--- a/pkg/radar_chart_handler.go
+++ b/pkg/radar_chart_handler.go
@@ -5,7 +5,6 @@ import (
"net/http"
"github.com/labstack/echo/v4"
- charts "github.com/vicanso/go-charts/v2"
)
type RadarChartHandler struct {
@@ -19,10 +18,9 @@ func NewRadarChartHandler() *RadarChartHandler {
}
type RadarChartData struct {
- Labels []string `json:"labels"`
- Names []string `json:"names"`
- Indicators []float64 `json:"indicators"`
- Values [][]float64 `json:"values"`
+ Labels []string `json:"labels"`
+ Names []string `json:"names"`
+ Values [][]float64 `json:"values"`
}
func (h *RadarChartHandler) Get(c echo.Context) ([]byte, error) {
@@ -46,34 +44,6 @@ func (h *RadarChartHandler) Get(c echo.Context) ([]byte, error) {
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
- graph, err := charts.RadarRender(
- data.Values,
- charts.TitleOptionFunc(charts.TitleOption{
- Text: req.ChartTitle,
- Subtext: req.ChartSubtitle,
- SubtextFontSize: 9,
- Left: charts.PositionCenter,
- }),
- charts.HeightOptionFunc(req.Height),
- charts.WidthOptionFunc(req.Width),
- charts.LegendOptionFunc(charts.LegendOption{
- Orient: charts.OrientVertical,
- Data: data.Labels,
- Left: charts.PositionLeft,
- }),
- charts.RadarIndicatorOptionFunc(data.Names, h.chart.GetIndicators(data.Values)),
- func(opt *charts.ChartOption) {
- opt.Theme = req.Theme
- },
- )
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, err.Error())
- }
-
- buf, err := graph.Bytes()
- if err != nil {
- return nil, err
- }
SetHeaders(c.Response().Header())
- return buf, nil
+ return h.chart.Get(data.Values, data.Names, data.Labels, req)
}
diff --git a/pkg/routes.go b/pkg/routes.go
index 5e71e71..d88d18c 100644
--- a/pkg/routes.go
+++ b/pkg/routes.go
@@ -10,21 +10,36 @@ import (
//go:embed favicon.ico
var faviconEmbed embed.FS
+const (
+ DOCS_URL = "https://github.com/kevincobain2000/instachart"
+ FAVICON_FILE = "favicon.ico"
+ ROBOTS_FILE = "robots.txt"
+ ROBOTS_TXT = "User-agent: *\nAllow: /"
+)
+
func SetupRoutes(e *echo.Echo, baseURL string) {
- fav, _ := faviconEmbed.ReadFile("favicon.ico")
+ fav, _ := faviconEmbed.ReadFile(FAVICON_FILE)
+
+ // /
+ e.GET(baseURL+"", func(c echo.Context) error {
+ return c.Redirect(http.StatusMovedPermanently, DOCS_URL)
+ })
+
+ // /health
e.GET(baseURL+"health", func(c echo.Context) error {
return c.String(http.StatusOK, "OK")
})
- e.GET(baseURL+"robots.txt", func(c echo.Context) error {
- return c.String(http.StatusOK, "User-agent: *\nAllow: /")
+ // /robots.txt
+ e.GET(baseURL+ROBOTS_FILE, func(c echo.Context) error {
+ return c.String(http.StatusOK, ROBOTS_TXT)
})
- e.GET(baseURL+"favicon.ico", func(c echo.Context) error {
+ // /favicon.ico
+ e.GET(baseURL+FAVICON_FILE, func(c echo.Context) error {
return c.Blob(http.StatusOK, "image/x-icon", fav)
})
- e.GET(baseURL+"", func(c echo.Context) error {
- return c.Redirect(http.StatusMovedPermanently, "https://github.com/kevincobain2000/instachart")
- })
+
+ // /line
e.GET(baseURL+"line", func(c echo.Context) error {
img, err := NewLineChartHandler().Get(c)
if err != nil {
@@ -32,6 +47,7 @@ func SetupRoutes(e *echo.Echo, baseURL string) {
}
return c.Blob(http.StatusOK, "", img)
})
+ // /bar
e.GET(baseURL+"bar", func(c echo.Context) error {
img, err := NewBarChartHandler().Get(c)
if err != nil {
@@ -39,6 +55,7 @@ func SetupRoutes(e *echo.Echo, baseURL string) {
}
return c.Blob(http.StatusOK, "", img)
})
+ // /radar
e.GET(baseURL+"radar", func(c echo.Context) error {
img, err := NewRadarChartHandler().Get(c)
if err != nil {
@@ -46,6 +63,7 @@ func SetupRoutes(e *echo.Echo, baseURL string) {
}
return c.Blob(http.StatusOK, "", img)
})
+ // /donut
e.GET(baseURL+"donut", func(c echo.Context) error {
img, err := NewDonutChartHandler().Get(c)
if err != nil {
@@ -53,6 +71,7 @@ func SetupRoutes(e *echo.Echo, baseURL string) {
}
return c.Blob(http.StatusOK, "", img)
})
+ // /pie
e.GET(baseURL+"pie", func(c echo.Context) error {
img, err := NewPieChartHandler().Get(c)
if err != nil {
From 08babe422722c7acd16b6b80a47de862629cfe06 Mon Sep 17 00:00:00 2001
From: Pulkit Kathuria
Date: Thu, 28 Dec 2023 21:58:22 +0900
Subject: [PATCH 2/3] (fix) missing headers on bar
---
README.md | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 53e2bce..363828e 100644
--- a/README.md
+++ b/README.md
@@ -104,16 +104,13 @@ https://instachart.coveritup.app/line?title=Line+Chart+Simple&subtitle=Sleeping+
-
-
-
## `GET /bar`
-| `data` | Required | Description | Example |
-| :----- | :------- | :--------------- | :--------------------------- |
-| `x` | ◯ | []Array (string) | `"x": [["Mon","Tue", "Wed"]` |
-| `y` | ◯ | []Array (int) | `"y": [[1,2,3]]` |
+| `data` | Required | Description | Example |
+| :----- | :------- | :------------- | :-------------------------- |
+| `x` | ◯ | Array (string) | `"x": ["Mon","Tue", "Wed"]` |
+| `y` | ◯ | []Array (int) | `"y": [[1,2,3]]` |
REQUEST URL
@@ -121,7 +118,7 @@ https://instachart.coveritup.app/line?title=Line+Chart+Simple&subtitle=Sleeping+
```sh
https://instachart.coveritup.app/bar?title=Bar+Chart&subtitle=Sleeping+hours&data={
"x": ["Monday", "Friday", "Sunday"],
- "y": [[8, 2 ,14]]
+ "y": [[8,2,14]]
}
```
@@ -130,8 +127,8 @@ https://instachart.coveritup.app/bar?title=Bar+Chart&subtitle=Sleeping+hours&dat
-
-
+
+
From 2e307343d6e4c76d1c79029212de0cd3f10f894e Mon Sep 17 00:00:00 2001
From: Pulkit Kathuria
Date: Thu, 28 Dec 2023 21:59:06 +0900
Subject: [PATCH 3/3] (fix) principle
---
pkg/bar_chart_handler.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pkg/bar_chart_handler.go b/pkg/bar_chart_handler.go
index 0cf0d9f..378d551 100644
--- a/pkg/bar_chart_handler.go
+++ b/pkg/bar_chart_handler.go
@@ -44,9 +44,9 @@ func (h *BarChartHandler) Get(c echo.Context) ([]byte, error) {
return nil, echo.NewHTTPError(http.StatusUnprocessableEntity, msgs)
}
SetHeaders(c.Response().Header())
- if !req.Horizontal {
- return h.chart.GetVertical(data.XData, data.YData, data.Names, req)
+ if req.Horizontal {
+ return h.chart.GetHorizontal(data.XData, data.YData, data.Names, req)
}
- return h.chart.GetHorizontal(data.XData, data.YData, data.Names, req)
+ return h.chart.GetVertical(data.XData, data.YData, data.Names, req)
}