Files
EdgeAdmin/internal/web/actions/default/ui/components.go

115 lines
3.0 KiB
Go
Raw Normal View History

2020-07-22 22:19:39 +08:00
package ui
import (
2021-01-28 17:04:36 +08:00
"bytes"
2021-06-27 21:59:06 +08:00
"crypto/md5"
2020-09-29 11:28:39 +08:00
"encoding/json"
2021-06-27 21:59:06 +08:00
"fmt"
2020-09-29 11:28:39 +08:00
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/conds/condutils"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
2021-06-09 17:14:31 +08:00
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
2020-07-22 22:19:39 +08:00
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/files"
"github.com/iwind/TeaGo/logs"
2021-06-27 21:59:06 +08:00
"net/http"
2020-07-22 22:19:39 +08:00
)
type ComponentsAction actions.Action
2021-01-28 17:04:36 +08:00
var componentsData = []byte{}
2021-06-27 21:59:06 +08:00
var componentsDataSum string
2021-01-28 17:04:36 +08:00
2020-07-22 22:19:39 +08:00
func (this *ComponentsAction) RunGet(params struct{}) {
this.AddHeader("Content-Type", "text/javascript; charset=utf-8")
2021-06-27 21:59:06 +08:00
// etag
var requestETag = this.Header("If-None-Match")
if len(requestETag) > 0 && requestETag == "\""+componentsDataSum+"\"" {
this.ResponseWriter.WriteHeader(http.StatusNotModified)
return
}
2021-01-28 17:04:36 +08:00
if !Tea.IsTesting() && len(componentsData) > 0 {
this.AddHeader("Last-Modified", "Fri, 06 Sep 2019 08:29:50 GMT")
2021-01-28 17:04:36 +08:00
this.Write(componentsData)
return
}
var buffer = bytes.NewBuffer([]byte{})
2020-07-22 22:19:39 +08:00
var webRoot string
if Tea.IsTesting() {
webRoot = Tea.Root + "/../web/public/js/components/"
} else {
webRoot = Tea.Root + "/web/public/js/components/"
}
f := files.NewFile(webRoot)
f.Range(func(file *files.File) {
if !file.IsFile() {
return
}
if file.Ext() != ".js" {
return
}
data, err := file.ReadAll()
if err != nil {
logs.Error(err)
return
}
2021-01-28 17:04:36 +08:00
buffer.Write(data)
buffer.Write([]byte{'\n', '\n'})
2020-07-22 22:19:39 +08:00
})
2020-09-29 11:28:39 +08:00
// 条件组件
typesJSON, err := json.Marshal(condutils.ReadAllAvailableCondTypes())
if err != nil {
2021-06-09 17:14:31 +08:00
logs.Println("ComponentsAction marshal request cond types failed: " + err.Error())
2020-09-29 11:28:39 +08:00
} else {
2021-01-28 17:04:36 +08:00
buffer.WriteString("window.REQUEST_COND_COMPONENTS = ")
buffer.Write(typesJSON)
buffer.Write([]byte{'\n', '\n'})
2020-09-29 11:28:39 +08:00
}
2021-01-28 17:04:36 +08:00
2021-06-09 17:14:31 +08:00
// 条件操作符
requestOperatorsJSON, err := json.Marshal(shared.AllRequestOperators())
if err != nil {
logs.Println("ComponentsAction marshal request operators failed: " + err.Error())
} else {
buffer.WriteString("window.REQUEST_COND_OPERATORS = ")
buffer.Write(requestOperatorsJSON)
buffer.Write([]byte{'\n', '\n'})
}
// 请求变量
requestVariablesJSON, err := json.Marshal(shared.DefaultRequestVariables())
if err != nil {
logs.Println("ComponentsAction marshal request variables failed: " + err.Error())
} else {
buffer.WriteString("window.REQUEST_VARIABLES = ")
buffer.Write(requestVariablesJSON)
buffer.Write([]byte{'\n', '\n'})
}
// 指标
metricHTTPKeysJSON, err := json.Marshal(serverconfigs.FindAllMetricKeyDefinitions(serverconfigs.MetricItemCategoryHTTP))
if err != nil {
logs.Println("ComponentsAction marshal metric http keys failed: " + err.Error())
} else {
buffer.WriteString("window.METRIC_HTTP_KEYS = ")
buffer.Write(metricHTTPKeysJSON)
buffer.Write([]byte{'\n', '\n'})
}
2021-01-28 17:04:36 +08:00
componentsData = buffer.Bytes()
2021-06-27 21:59:06 +08:00
// ETag
var h = md5.New()
h.Write(buffer.Bytes())
componentsDataSum = fmt.Sprintf("%x", h.Sum(nil))
this.AddHeader("ETag", "\""+componentsDataSum+"\"")
2021-01-28 17:04:36 +08:00
this.Write(componentsData)
2020-07-22 22:19:39 +08:00
}