finished column plot. but pie plot has problem

This commit is contained in:
weizili.360.laptop 2014-12-26 21:03:34 +08:00
parent dcfbbc426a
commit cd617973d1
6 changed files with 137 additions and 152 deletions

View File

@ -1,14 +1,12 @@
package main package main
import ( import (
"fmt"
"github.com/bitly/go-simplejson"
"github.com/zieckey/goini" "github.com/zieckey/goini"
"log" "log"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings"
) )
const DataPrefix = "Data|" const DataPrefix = "Data|"
@ -18,78 +16,27 @@ type ChartIf interface {
Template() string Template() string
} }
type SplineChart int
func (c *SplineChart) Parse(ini *goini.INI) (map[string]string, error) {
log.Printf("c=%v ini=%v\n", c, ini)
args := make(map[string]string)
args["ChartType"] = "spline"
args["Title"], _ = ini.Get("Title")
args["SubTitle"], _ = ini.Get("SubTitle")
args["YAxisText"], _ = ini.Get("YAxisText")
args["XAxisNumbers"], _ = ini.Get("XAxisNumbers")
args["ValueSuffix"], _ = ini.Get("ValueSuffix")
datas := make([]interface{}, 0)
kv, _ := ini.GetKvmap(goini.DefaultSection)
for k, v := range kv {
if !strings.HasPrefix(k, DataPrefix) {
continue
}
dd := strings.Split(v, ", ")
jd := make([]interface{}, 0)
for _, d := range dd {
val, err := strconv.ParseFloat(d, 64)
if err == nil {
jd = append(jd, val)
}
log.Printf("ParseFloat(%v) v=%v err=%v\n", d, val, err)
}
json := simplejson.New()
json.Set("name", k[len(DataPrefix):])
json.Set("data", jd)
datas = append(datas, json)
}
json := simplejson.New()
json.Set("DataArray", datas)
b, _ := json.Get("DataArray").Encode()
args["DataArray"] = string(b)
fmt.Printf("DataArray:\n%v\n", string(b))
fmt.Printf("=========================================================>>Args:\n%v\n", args)
return args, nil
}
func (c *SplineChart) Template() string {
return TemplateSplineHtml
}
type TemplateArgs struct { type TemplateArgs struct {
args map[string]string args map[string]string
tmpl string tmpl string
} }
func Parse(file string) (ta TemplateArgs, err error) { func Parse(file string) (tt TemplateArgs, err error) {
ini := goini.New() ini := goini.New()
err = ini.ParseFile(file) err = ini.ParseFile(file)
if err != nil { if err != nil {
return ta, err return tt, err
} }
t, _ := ini.Get("ChartType") t, _ := ini.Get("ChartType")
log.Printf("ini.Get ChartType=%v\n", t) log.Printf("ini.Get ChartType=%v\n", t)
if f, ok := ChartHandlers[t]; ok { if f, ok := ChartHandlers[t]; ok {
log.Printf("f=%v ok=%v\n", f, ok) log.Printf("f=%v ok=%v\n", f, ok)
ta.args, err = f.Parse(ini) tt.args, err = f.Parse(ini)
ta.tmpl = f.Template() tt.tmpl = f.Template()
} }
return ta, err return tt, err
} }
func LookupChartFiles(dir string) ([]string, error) { func LookupChartFiles(dir string) ([]string, error) {

View File

@ -1,12 +1,12 @@
ChartType = pie ChartType = pie
Title = Browser market shares at a specific website, 2014 Title = Browser market shares at a specific website, 2014
SubTitle = from website.com SubTitle = from website.com
SerieName = Browser shares SeriesName = Browser shares
# The data and the name of the pieces of the pie # The data and the name of the pieces of the pie
Data|Firefox = 45.0 Data|Firefox = 45.0
Data|IE = 26.8 Data|IE = 26.8
Data|Chrome = 12.8 Data|Chrome = 12.8
Data|Safari = 8.5 Data|Safari = 8.5
Data|Opera = 6.2 Data|Opera = 6.2
Data|Others = 0.7 Data|Others = 0.7

44
pie_parser.go Normal file
View File

@ -0,0 +1,44 @@
package main
import (
"fmt"
"github.com/zieckey/goini"
"log"
"strings"
)
type PieChart int
func (c *PieChart) Parse(ini *goini.INI) (map[string]string, error) {
log.Printf("c=%v ini=%v\n", c, ini)
args := make(map[string]string)
args["ChartType"], _ = ini.Get("ChartType")
args["Title"], _ = ini.Get("Title")
args["SubTitle"], _ = ini.Get("SubTitle")
args["SeriesName"], _ = ini.Get("SeriesName")
DataArray := "[\n"
kv, _ := ini.GetKvmap(goini.DefaultSection)
for k, v := range kv {
if !strings.HasPrefix(k, DataPrefix) {
continue
}
key := k[len(DataPrefix):]
DataArray = DataArray + "['" + key + "' : " + v + "],\n"
}
DataArray = DataArray + "]"
args["DataArray"] = DataArray
fmt.Printf("=========================================================>>Args:\n%v\n", args)
return args, nil
}
func (c *PieChart) Template() string {
return TemplatePieHtml
}

View File

@ -7,68 +7,6 @@ import (
"text/template" "text/template"
) )
var SplineDataArray = `
[
{
name: 'Tokyo',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
},
{
name: 'New York',
data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
},
{
name: 'Berlin',
data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
},
{
name: 'London',
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}
]
`
var PieDataArray = `
[
['Firefox', 45.0],
['IE', 26.8],
['Chrome', 12.8],
['Safari', 8.5],
['Opera', 6.2],
['Others', 0.7]
]
`
var ArgsSpline = map[string]string{
"ChartType": "spline",
"Title": "Monthly Average Temperature",
"SubTitle": "Source: WorldClimate.com",
"YAxisText": "Temperature (°C)",
"XAxisNumbers": "['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']",
"ValueSuffix": "°C",
"DataArray": SplineDataArray,
}
var ArgsColumn = map[string]string{
"ChartType": "column",
"Title": "Monthly Average Temperature",
"SubTitle": "Source: WorldClimate.com",
"YAxisText": "Temperature (°C)",
"XAxisNumbers": "['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']",
"ValueSuffix": "°C",
"DataArray": SplineDataArray,
}
var ArgsPie = map[string]string{
"ChartType": "pie",
"Title": "Browser market shares at a specific website, 2014",
"SubTitle": "Source: website.com",
"SerieName": "Browser shares",
"DataArray": PieDataArray,
}
var ( var (
ChartHandlers = make(map[string]ChartIf) ChartHandlers = make(map[string]ChartIf)
ChartFiles []string ChartFiles []string
@ -76,29 +14,19 @@ var (
) )
func handler(w http.ResponseWriter, r *http.Request) { func handler(w http.ResponseWriter, r *http.Request) {
var Args map[string]string tt, err := Parse(ChartFiles[Index])
var tmpl string if err != nil {
w.Write([]byte(err.Error()))
Args = ArgsColumn return
Args = ArgsSpline
Args = ArgsPie
tmpl = TemplatePieHtml
path := r.URL.Path[1:]
if path == "spline" {
tmplagrs, err := Parse(ChartFiles[Index])
Index++
Index = Index % len(ChartFiles)
if err == nil {
Args = tmplagrs.args
tmpl = TemplateSplineHtml
}
} }
Index++
Index = Index % len(ChartFiles)
if t, err := template.New("foo").Parse(tmpl); err != nil { if t, err := template.New("foo").Parse(tt.tmpl); err != nil {
w.Write([]byte(err.Error())) w.Write([]byte(err.Error()))
} else { } else {
if err = t.ExecuteTemplate(w, "T", Args); err != nil { if err = t.ExecuteTemplate(w, "T", tt.args); err != nil {
w.Write([]byte(err.Error())) w.Write([]byte(err.Error()))
} }
} }
@ -118,6 +46,8 @@ func ListenAndServe(addr string) error {
} }
ChartHandlers["spline"] = new(SplineChart) ChartHandlers["spline"] = new(SplineChart)
ChartHandlers["column"] = new(ColumnChart)
ChartHandlers["pie"] = new(PieChart)
return http.ListenAndServe(addr, nil) return http.ListenAndServe(addr, nil)
} }

64
spline_parser.go Normal file
View File

@ -0,0 +1,64 @@
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"github.com/zieckey/goini"
"log"
"strconv"
"strings"
)
type SplineChart int
type ColumnChart struct {
SplineChart
}
func (c *SplineChart) Parse(ini *goini.INI) (map[string]string, error) {
log.Printf("c=%v ini=%v\n", c, ini)
args := make(map[string]string)
args["ChartType"], _ = ini.Get("ChartType")
args["Title"], _ = ini.Get("Title")
args["SubTitle"], _ = ini.Get("SubTitle")
args["YAxisText"], _ = ini.Get("YAxisText")
args["XAxisNumbers"], _ = ini.Get("XAxisNumbers")
args["ValueSuffix"], _ = ini.Get("ValueSuffix")
datas := make([]interface{}, 0)
kv, _ := ini.GetKvmap(goini.DefaultSection)
for k, v := range kv {
if !strings.HasPrefix(k, DataPrefix) {
continue
}
dd := strings.Split(v, ", ")
jd := make([]interface{}, 0)
for _, d := range dd {
val, err := strconv.ParseFloat(d, 64)
if err == nil {
jd = append(jd, val)
}
log.Printf("ParseFloat(%v) v=%v err=%v\n", d, val, err)
}
json := simplejson.New()
json.Set("name", k[len(DataPrefix):])
json.Set("data", jd)
datas = append(datas, json)
}
json := simplejson.New()
json.Set("DataArray", datas)
b, _ := json.Get("DataArray").Encode()
args["DataArray"] = string(b)
fmt.Printf("DataArray:\n%v\n", string(b))
fmt.Printf("=========================================================>>Args:\n%v\n", args)
return args, nil
}
func (c *SplineChart) Template() string {
return TemplateSplineHtml
}

View File

@ -46,7 +46,7 @@ var TemplatePieHtml = `{{define "T"}}
}, },
series: [{ series: [{
// name: 'Browser share', // name: 'Browser share',
name : '{{.SerieName}}', name : '{{.SeriesName}}',
data: data:
{{.DataArray}} {{.DataArray}}
/* /*