Files
waf-platform/EdgeCommon/pkg/serverconfigs/access_log_storages.go
2026-02-10 19:30:44 +08:00

133 lines
5.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package serverconfigs
import (
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
)
// AccessLogStorageType 访问日志存储类型(含「存储+写入目标」组合)
type AccessLogStorageType = string
const (
AccessLogStorageTypeFile AccessLogStorageType = "file"
AccessLogStorageTypeFileMySQL AccessLogStorageType = "file_mysql"
AccessLogStorageTypeFileClickhouse AccessLogStorageType = "file_clickhouse"
AccessLogStorageTypeFileMySQLClickhouse AccessLogStorageType = "file_mysql_clickhouse"
AccessLogStorageTypeES AccessLogStorageType = "es"
AccessLogStorageTypeTCP AccessLogStorageType = "tcp"
AccessLogStorageTypeSyslog AccessLogStorageType = "syslog"
AccessLogStorageTypeCommand AccessLogStorageType = "command"
)
// FindAllAccessLogStorageTypes 所有存储引擎列表(含写入目标组合:文件、文件+MySQL、文件+ClickHouse 等)
func FindAllAccessLogStorageTypes() []*shared.Definition {
return []*shared.Definition{
{Name: "文件", Code: AccessLogStorageTypeFile, Description: "节点写本地 JSON 文件"},
{Name: "文件+MySQL", Code: AccessLogStorageTypeFileMySQL, Description: "节点写文件 + API 写 MySQL"},
{Name: "文件+ClickHouse", Code: AccessLogStorageTypeFileClickhouse, Description: "节点写文件 + 落 ClickHouseFluent Bit 或 API 直写)"},
{Name: "文件+MySQL+ClickHouse", Code: AccessLogStorageTypeFileMySQLClickhouse, Description: "节点写文件 + API 写 MySQL + ClickHouse"},
{Name: "ElasticSearch", Code: AccessLogStorageTypeES, Description: "将日志存储在ElasticSearch中"},
{Name: "TCP Socket", Code: AccessLogStorageTypeTCP, Description: "将日志通过TCP套接字输出"},
{Name: "Syslog", Code: AccessLogStorageTypeSyslog, Description: "将日志通过syslog输出仅支持Linux"},
{Name: "命令行输入流", Code: AccessLogStorageTypeCommand, Description: "启动一个命令通过读取stdin接收日志信息"},
}
}
// FindAccessLogStorageTypeName 根据类型查找名称
func FindAccessLogStorageTypeName(storageType string) string {
for _, m := range FindAllAccessLogStorageTypes() {
if m.Code == storageType {
return m.Name
}
}
return ""
}
// IsFileBasedStorageType 是否为基于文件的存储(需要显示文件路径等配置)
func IsFileBasedStorageType(code string) bool {
switch code {
case AccessLogStorageTypeFile, AccessLogStorageTypeFileMySQL, AccessLogStorageTypeFileClickhouse, AccessLogStorageTypeFileMySQLClickhouse:
return true
default:
return false
}
}
// ParseStorageTypeAndWriteTargets 从下拉框选中的类型解析出「实际存储类型」与「写入目标」
// 用于创建/更新策略options 按 baseType 填(如 filewriteTargets 按组合填。
func ParseStorageTypeAndWriteTargets(selectedType string) (baseType string, writeTargets *AccessLogWriteTargets) {
writeTargets = &AccessLogWriteTargets{}
switch selectedType {
case AccessLogStorageTypeFile:
baseType = AccessLogStorageTypeFile
writeTargets.File = true
case AccessLogStorageTypeFileMySQL:
baseType = AccessLogStorageTypeFile
writeTargets.File = true
writeTargets.MySQL = true
case AccessLogStorageTypeFileClickhouse:
baseType = AccessLogStorageTypeFile
writeTargets.File = true
writeTargets.ClickHouse = true
case AccessLogStorageTypeFileMySQLClickhouse:
baseType = AccessLogStorageTypeFile
writeTargets.File = true
writeTargets.MySQL = true
writeTargets.ClickHouse = true
case AccessLogStorageTypeES, AccessLogStorageTypeTCP, AccessLogStorageTypeSyslog, AccessLogStorageTypeCommand:
baseType = selectedType
writeTargets.MySQL = true
default:
baseType = selectedType
writeTargets.File = true
writeTargets.MySQL = true
}
return baseType, writeTargets
}
// ResolveWriteTargetsByType 仅根据策略类型与 disableDefaultDB 计算写入目标(不依赖 writeTargets 字段)
func ResolveWriteTargetsByType(policyType string, disableDefaultDB bool) *AccessLogWriteTargets {
t := &AccessLogWriteTargets{}
switch policyType {
case AccessLogStorageTypeFileMySQL:
t.File = true
t.MySQL = true
case AccessLogStorageTypeFileClickhouse:
t.File = true
t.ClickHouse = true
case AccessLogStorageTypeFileMySQLClickhouse:
t.File = true
t.MySQL = true
t.ClickHouse = true
case AccessLogStorageTypeFile:
t.File = true
t.MySQL = !disableDefaultDB
default:
t.MySQL = !disableDefaultDB
}
if !t.File && !t.MySQL && !t.ClickHouse {
t.File = true
t.MySQL = true
}
return t
}
// ComposeStorageTypeDisplay 根据策略的 Type + WriteTargets 得到下拉框显示用的类型 code用于编辑页回显
func ComposeStorageTypeDisplay(policyType string, writeTargets *AccessLogWriteTargets) string {
if policyType != AccessLogStorageTypeFile {
return policyType
}
if writeTargets == nil {
return AccessLogStorageTypeFile
}
if writeTargets.File && writeTargets.MySQL && writeTargets.ClickHouse {
return AccessLogStorageTypeFileMySQLClickhouse
}
if writeTargets.File && writeTargets.MySQL {
return AccessLogStorageTypeFileMySQL
}
if writeTargets.File && writeTargets.ClickHouse {
return AccessLogStorageTypeFileClickhouse
}
return AccessLogStorageTypeFile
}