120 lines
3.0 KiB
Go
120 lines
3.0 KiB
Go
|
|
/*
|
||
|
|
* Copyright (c) 2022 Huawei Device Co., Ltd.
|
||
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
|
* you may not use this file except in compliance with the License.
|
||
|
|
* You may obtain a copy of the License at
|
||
|
|
*
|
||
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
*
|
||
|
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
|
* See the License for the specific language governing permissions and
|
||
|
|
* limitations under the License.
|
||
|
|
*/
|
||
|
|
|
||
|
|
package rec
|
||
|
|
|
||
|
|
import (
|
||
|
|
"code.cloudfoundry.org/archiver/compressor"
|
||
|
|
"fmt"
|
||
|
|
"fotff/tester"
|
||
|
|
"fotff/utils"
|
||
|
|
"github.com/jedib0t/go-pretty/v6/table"
|
||
|
|
"github.com/jedib0t/go-pretty/v6/text"
|
||
|
|
"github.com/sirupsen/logrus"
|
||
|
|
"reflect"
|
||
|
|
"sort"
|
||
|
|
)
|
||
|
|
|
||
|
|
const css = `<head>
|
||
|
|
<style type="text/css">
|
||
|
|
table{
|
||
|
|
border:1px solid;
|
||
|
|
border-spacing: 0;
|
||
|
|
}
|
||
|
|
th{
|
||
|
|
font-size: 11;
|
||
|
|
border:1px solid;
|
||
|
|
padding: 10px;
|
||
|
|
background-color: rgb(137,190,178);
|
||
|
|
}
|
||
|
|
td{
|
||
|
|
font-size: 11;
|
||
|
|
border:1px solid;
|
||
|
|
padding: 10px;
|
||
|
|
background-color: rgb(160,191,124);
|
||
|
|
}
|
||
|
|
.bg-red{
|
||
|
|
background-color: rgb(220,87,18);
|
||
|
|
}
|
||
|
|
.bg-yellow{
|
||
|
|
background-color: rgb(244,208,0);
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
</head>
|
||
|
|
`
|
||
|
|
|
||
|
|
func Report(curPkg string, taskName string) {
|
||
|
|
subject := fmt.Sprintf("[%s] %s test report", curPkg, taskName)
|
||
|
|
rt := reflect.TypeOf(Record{})
|
||
|
|
tb := table.NewWriter()
|
||
|
|
tb.SetIndexColumn(rt.NumField() + 1)
|
||
|
|
var row = table.Row{"test case"}
|
||
|
|
for i := 0; i < rt.NumField(); i++ {
|
||
|
|
f := rt.Field(i)
|
||
|
|
if f.IsExported() {
|
||
|
|
row = append(row, f.Tag.Get("col"))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
tb.AppendHeader(row)
|
||
|
|
tb.SetRowPainter(func(row table.Row) text.Colors {
|
||
|
|
for _, col := range row {
|
||
|
|
if str, ok := col.(string); ok {
|
||
|
|
if str == tester.ResultFail {
|
||
|
|
return text.Colors{text.BgRed}
|
||
|
|
} else if str == tester.ResultOccasionalFail {
|
||
|
|
return text.Colors{text.BgYellow}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
})
|
||
|
|
var rows []table.Row
|
||
|
|
for k, rec := range Records {
|
||
|
|
var row = table.Row{k}
|
||
|
|
rv := reflect.ValueOf(rec)
|
||
|
|
for i := 0; i < rv.NumField(); i++ {
|
||
|
|
if rv.Field(i).CanInterface() {
|
||
|
|
row = append(row, rv.Field(i).Interface())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
rows = append(rows, row)
|
||
|
|
}
|
||
|
|
sort.Slice(rows, func(i, j int) bool {
|
||
|
|
return rows[i][0].(string) < rows[j][0].(string)
|
||
|
|
})
|
||
|
|
tb.AppendRows(rows)
|
||
|
|
c := compressor.NewTgz()
|
||
|
|
var attrs []string
|
||
|
|
if utils.LogFile != nil {
|
||
|
|
if err := c.Compress(utils.LogFile.Name(), utils.LogFile.Name()+".tgz"); err != nil {
|
||
|
|
logrus.Errorf("failed to compress %s: %v", utils.LogFile.Name(), err)
|
||
|
|
} else {
|
||
|
|
attrs = append(attrs, utils.LogFile.Name()+".tgz")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if utils.StdoutFile != nil {
|
||
|
|
if err := c.Compress(utils.StdoutFile.Name(), utils.StdoutFile.Name()+".tgz"); err != nil {
|
||
|
|
logrus.Errorf("failed to compress %s: %v", utils.StdoutFile.Name(), err)
|
||
|
|
} else {
|
||
|
|
attrs = append(attrs, utils.StdoutFile.Name()+".tgz")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if err := utils.SendMail(subject, css+tb.RenderHTML(), attrs...); err != nil {
|
||
|
|
logrus.Errorf("failed to send report mail: %v", err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
logrus.Infof("send mail successfully")
|
||
|
|
}
|