github.com/jenkins-x/jx/v2@v2.1.155/pkg/reports/blog_report.go (about) 1 package reports 2 3 import ( 4 "io" 5 "io/ioutil" 6 "strings" 7 8 "github.com/jenkins-x/jx-logging/pkg/log" 9 "github.com/jenkins-x/jx/v2/pkg/util" 10 ) 11 12 type BlogBarReport struct { 13 Name string 14 BlogWriter io.Writer 15 JSFileName string 16 JSLinkURI string 17 18 labels []string 19 data []string 20 } 21 22 func NewBlogBarReport(name string, blogWriter io.Writer, jsFileName string, jsLinkURI string) *BlogBarReport { 23 if name == "" { 24 name = "barChart" 25 } 26 if jsLinkURI == "" { 27 jsLinkURI = jsFileName 28 } 29 return &BlogBarReport{Name: name, BlogWriter: blogWriter, JSFileName: jsFileName, JSLinkURI: jsLinkURI} 30 } 31 32 func (r *BlogBarReport) AddText(name string, value string) { 33 r.labels = append(r.labels, `"`+name+`"`) 34 r.data = append(r.data, value) 35 } 36 37 func (r *BlogBarReport) AddNumber(name string, value int) { 38 ReportAddNumber(r, name, value) 39 } 40 41 func (r *BlogBarReport) Render() error { 42 err := r.writeBlog() 43 if err != nil { 44 return err 45 } 46 js := r.createJs() 47 err = ioutil.WriteFile(r.JSFileName, []byte(js), util.DefaultWritePermissions) 48 if err != nil { 49 return err 50 } 51 log.Logger().Infof("Generated JavaScript %s", util.ColorInfo(r.JSFileName)) 52 return nil 53 } 54 55 func (r *BlogBarReport) writeBlog() error { 56 text := ` 57 <canvas id="` + r.elementName() + `" width="400" height="200"></canvas> 58 <script type="text/javascript" src="` + r.JSLinkURI + `"></script> 59 </canvas> 60 ` 61 _, err := r.BlogWriter.Write([]byte(text)) 62 return err 63 } 64 65 func (r *BlogBarReport) createJs() string { 66 label := strings.Title(r.Name) 67 labelsJs := strings.Join(r.labels, ", ") 68 dataJs := strings.Join(r.data, ", ") 69 elementId := r.elementName() 70 return `var ctx = document.getElementById("` + elementId + `").getContext('2d'); 71 var ` + elementId + ` = new Chart(ctx, { 72 type: 'bar', 73 data: { 74 labels: [` + labelsJs + `], 75 datasets: [{ 76 label: '# of ` + label + `', 77 data: [` + dataJs + `], 78 backgroundColor: [ 79 'rgba(255, 99, 132, 0.2)', 80 'rgba(54, 162, 235, 0.2)', 81 'rgba(255, 206, 86, 0.2)', 82 'rgba(75, 192, 192, 0.2)', 83 'rgba(153, 102, 255, 0.2)', 84 'rgba(255, 159, 64, 0.2)' 85 ], 86 borderColor: [ 87 'rgba(255,99,132,1)', 88 'rgba(54, 162, 235, 1)', 89 'rgba(255, 206, 86, 1)', 90 'rgba(75, 192, 192, 1)', 91 'rgba(153, 102, 255, 1)', 92 'rgba(255, 159, 64, 1)' 93 ], 94 borderWidth: 1 95 }] 96 }, 97 options: { 98 responsive: true, 99 /* 100 scales: { 101 yAxes: [{ 102 ticks: { 103 beginAtZero:true 104 } 105 }] 106 } 107 */ 108 } 109 }); 110 ` 111 } 112 113 func (r *BlogBarReport) elementName() string { 114 return r.Name + "Chart" 115 }