mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
e49078ac3b
- Agent 访问日志上报 user_agent,OpenResty log_format 输出 http_user_agent - of_node_access_logs 新增 user_agent 列并写入 ClickHouse - 访问日志概览新增:设备类型饼图、状态码饼图、浏览器/OS/User-Agent 排行 - 日志明细列表增加 User-Agent 列 - 扩展 UA 解析工具(browser/os/device)并支持 CLI 识别
47 lines
1.6 KiB
Go
47 lines
1.6 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package analytics
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
nodeAccessLogTableName = "of_node_access_logs"
|
|
nodeAccessLogInsertColumns = "id, node_id, logged_at, remote_addr, region, host, path, user_agent, status_code, bytes_sent, request_length, request_time_ms, created_at"
|
|
)
|
|
|
|
// NodeAccessLog stores OpenFlare edge node access records in ClickHouse.
|
|
type NodeAccessLog struct {
|
|
ID uint64 `gorm:"column:id"`
|
|
NodeID string `gorm:"column:node_id"`
|
|
LoggedAt time.Time `gorm:"column:logged_at"`
|
|
RemoteAddr string `gorm:"column:remote_addr"`
|
|
Region string `gorm:"column:region"`
|
|
Host string `gorm:"column:host"`
|
|
Path string `gorm:"column:path"`
|
|
UserAgent string `gorm:"column:user_agent"`
|
|
StatusCode int32 `gorm:"column:status_code"`
|
|
BytesSent uint64 `gorm:"column:bytes_sent"`
|
|
RequestLength uint64 `gorm:"column:request_length"`
|
|
RequestTimeMs uint32 `gorm:"column:request_time_ms"`
|
|
CreatedAt time.Time `gorm:"column:created_at"`
|
|
}
|
|
|
|
// TableName returns the ClickHouse table name.
|
|
func (NodeAccessLog) TableName() string {
|
|
return nodeAccessLogTableName
|
|
}
|
|
|
|
// InsertColumns returns comma-separated column names for batch insert.
|
|
func (NodeAccessLog) InsertColumns() string {
|
|
return nodeAccessLogInsertColumns
|
|
}
|
|
|
|
// BatchInsertSQL returns the INSERT prefix used by native batch writers.
|
|
func (NodeAccessLog) BatchInsertSQL() string {
|
|
return fmt.Sprintf("INSERT INTO %s (%s)", nodeAccessLogTableName, nodeAccessLogInsertColumns)
|
|
}
|