mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-12 18:11:34 +08:00
finish log list
This commit is contained in:
@@ -10,6 +10,7 @@ type ILogDriver interface {
|
||||
LogInfo(clusterId string, id string) (*LogInfo, error)
|
||||
LogCount(clusterId string, conditions map[string]string, spendHour int64, group string) (map[string]int64, error)
|
||||
Logs(clusterId string, conditions map[string]string, start time.Time, end time.Time, limit int64, offset int64) ([]*Log, int64, error)
|
||||
LogRecords(clusterId string, start time.Time, end time.Time) ([]*Log, error)
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -6,12 +6,22 @@ import (
|
||||
|
||||
type Log struct {
|
||||
ID string
|
||||
Strategy string
|
||||
Service string
|
||||
API string
|
||||
Method string
|
||||
Url string
|
||||
RemoteIP string
|
||||
Consumer string
|
||||
Authorization string
|
||||
InputToken int64
|
||||
OutputToken int64
|
||||
TotalToken int64
|
||||
AIProvider string
|
||||
AIModel string
|
||||
StatusCode int64
|
||||
ResponseTime int64
|
||||
Traffic int64
|
||||
RecordTime time.Time
|
||||
}
|
||||
|
||||
|
||||
+26
-21
@@ -53,25 +53,30 @@ type LogInfo struct {
|
||||
}
|
||||
|
||||
type LogDetail struct {
|
||||
Api string `json:"api"`
|
||||
Application string `json:"application"`
|
||||
Strategy string `json:"strategy"`
|
||||
ContentType string `json:"content_type"`
|
||||
Cluster string `json:"cluster"`
|
||||
Msec string `json:"msec"`
|
||||
Node string `json:"node"`
|
||||
RequestId string `json:"request_id"`
|
||||
RequestMethod string `json:"request_method"`
|
||||
RequestScheme string `json:"request_scheme"`
|
||||
RequestTime string `json:"request_time"`
|
||||
RequestUri string `json:"request_uri"`
|
||||
RequestBody string `json:"request_body"`
|
||||
ProxyBody string `json:"proxy_body"`
|
||||
ResponseBody string `json:"response_body"`
|
||||
ProxyResponseBody string `json:"proxy_response_body"`
|
||||
Service string `json:"service"`
|
||||
Provider string `json:"provider"`
|
||||
Authorization string `json:"authorization"`
|
||||
SrcIp string `json:"src_ip"`
|
||||
Status string `json:"status"`
|
||||
Api string `json:"api"`
|
||||
Application string `json:"application"`
|
||||
Strategy string `json:"strategy"`
|
||||
ContentType string `json:"content_type"`
|
||||
Cluster string `json:"cluster"`
|
||||
Msec string `json:"msec"`
|
||||
Node string `json:"node"`
|
||||
RequestId string `json:"request_id"`
|
||||
RequestMethod string `json:"request_method"`
|
||||
RequestScheme string `json:"request_scheme"`
|
||||
RequestTime string `json:"request_time"`
|
||||
RequestUri string `json:"request_uri"`
|
||||
RequestBody string `json:"request_body"`
|
||||
ProxyBody string `json:"proxy_body"`
|
||||
ResponseBody string `json:"response_body"`
|
||||
ProxyResponseBody string `json:"proxy_response_body"`
|
||||
Service string `json:"service"`
|
||||
Provider string `json:"provider"`
|
||||
Authorization string `json:"authorization"`
|
||||
SrcIp string `json:"src_ip"`
|
||||
Status string `json:"status"`
|
||||
AIProvider string `json:"ai_provider"`
|
||||
AIModel string `json:"ai_model"`
|
||||
AIModelInputToken interface{} `json:"ai_model_input_token"`
|
||||
AIModelOutputToken interface{} `json:"ai_model_output_token"`
|
||||
AIModelTotalToken interface{} `json:"ai_model_total_token"`
|
||||
}
|
||||
|
||||
+48
-1
@@ -132,6 +132,24 @@ func (d *Driver) LogCount(clusterId string, conditions map[string]string, spendH
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Driver) LogRecords(clusterId string, start time.Time, end time.Time) ([]*log_driver.Log, error) {
|
||||
if start.After(end) {
|
||||
return nil, fmt.Errorf("start time is greater than end time")
|
||||
}
|
||||
queries := url.Values{}
|
||||
queries.Set("query", fmt.Sprintf("{cluster=\"%s\"} | json", clusterId))
|
||||
queries.Set("direction", "backward")
|
||||
queries.Set("start", strconv.FormatInt(start.UnixNano(), 10))
|
||||
queries.Set("end", strconv.FormatInt(end.UnixNano(), 10))
|
||||
log.Debug("query is ", queries.Get("query"))
|
||||
logs, err := d.recuseLogs(queries, end, 1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
func (d *Driver) Logs(clusterId string, conditions map[string]string, start time.Time, end time.Time, limit int64, offset int64) ([]*log_driver.Log, int64, error) {
|
||||
if start.After(end) {
|
||||
return nil, 0, fmt.Errorf("start time is greater than end time")
|
||||
@@ -205,15 +223,24 @@ func (d *Driver) recuseLogs(queries url.Values, end time.Time, offset int64) ([]
|
||||
}
|
||||
detail := l.Stream
|
||||
msec, _ := strconv.ParseInt(detail.Msec, 10, 64)
|
||||
|
||||
logs = append(logs, &log_driver.Log{
|
||||
ID: detail.RequestId,
|
||||
Strategy: detail.Strategy,
|
||||
Service: detail.Provider,
|
||||
API: detail.Api,
|
||||
Method: detail.RequestMethod,
|
||||
Url: detail.RequestUri,
|
||||
RemoteIP: detail.SrcIp,
|
||||
Consumer: detail.Application,
|
||||
Authorization: detail.Authorization,
|
||||
InputToken: parseToInt64(detail.AIModelInputToken),
|
||||
OutputToken: parseToInt64(detail.AIModelOutputToken),
|
||||
TotalToken: parseToInt64(detail.AIModelTotalToken),
|
||||
AIProvider: detail.AIProvider,
|
||||
AIModel: detail.AIModel,
|
||||
StatusCode: parseToInt64(detail.Status),
|
||||
ResponseTime: parseToInt64(detail.RequestTime),
|
||||
Traffic: int64(len(detail.ResponseBody) + len(detail.RequestBody)),
|
||||
RecordTime: time.UnixMilli(msec),
|
||||
})
|
||||
}
|
||||
@@ -223,6 +250,26 @@ func (d *Driver) recuseLogs(queries url.Values, end time.Time, offset int64) ([]
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
func parseToInt64(v interface{}) int64 {
|
||||
switch t := v.(type) {
|
||||
case int:
|
||||
return int64(t)
|
||||
case int64:
|
||||
return t
|
||||
case string:
|
||||
if v == "" {
|
||||
return 0
|
||||
}
|
||||
i, err := strconv.ParseInt(t, 10, 64)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return i
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) logCount(clusterId string, conditions map[string]string, start time.Time, end time.Time) (int64, error) {
|
||||
// 先查在这段时间内符合条件的日志数量
|
||||
queries := url.Values{}
|
||||
|
||||
Reference in New Issue
Block a user