Skip to content

Commit 7eace87

Browse files
committed
🎉 Optimized the data preview function of log datasource
1 parent 556efba commit 7eace87

File tree

7 files changed

+60
-62
lines changed

7 files changed

+60
-62
lines changed

api/datasource.go

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (dc DatasourceController) API(gin *gin.RouterGroup) {
4848
datasourceB.GET("dataSourceSearch", dc.Search)
4949
datasourceB.GET("promQuery", dc.PromQuery)
5050
datasourceB.POST("dataSourcePing", dc.Ping)
51-
datasourceB.POST("esSearch", dc.EsSearch)
51+
datasourceB.POST("searchViewLogsContent", dc.SearchViewLogsContent)
5252
}
5353

5454
}
@@ -180,9 +180,9 @@ func (dc DatasourceController) Ping(ctx *gin.Context) {
180180
})
181181
}
182182

183-
// EsSearch es 内容搜索
184-
func (dc DatasourceController) EsSearch(ctx *gin.Context) {
185-
r := new(models.EsSearchReq)
183+
// SearchViewLogsContent Logs 数据预览
184+
func (dc DatasourceController) SearchViewLogsContent(ctx *gin.Context) {
185+
r := new(models.SearchLogsContentReq)
186186
BindJson(ctx, r)
187187

188188
Service(ctx, func() (interface{}, interface{}) {
@@ -192,45 +192,54 @@ func (dc DatasourceController) EsSearch(ctx *gin.Context) {
192192
if err != nil {
193193
return nil, err
194194
}
195+
195196
datasource := data.(models.AlertDataSource)
196-
client, err := provider.NewElasticSearchClient(ctx, datasource)
197-
if err != nil {
198-
return nil, err
199-
}
197+
198+
var (
199+
client provider.LogsFactoryProvider
200+
options provider.LogQueryOptions
201+
)
200202

201203
// 使用 base64.StdEncoding 进行解码
202204
decodedBytes, err := base64.StdEncoding.DecodeString(r.Query)
203205
if err != nil {
204206
return nil, fmt.Errorf("base64 解码失败: %s", err)
205207
}
206-
207208
// 将解码后的字节转换为字符串
208209
QueryStr := string(decodedBytes)
209210

210-
query, _, err := client.Query(provider.LogQueryOptions{ElasticSearch: provider.Elasticsearch{
211-
Index: r.GetIndexName(),
212-
QueryType: "RawJson",
213-
RawJson: QueryStr,
214-
}})
215-
if err != nil {
216-
return nil, err
217-
}
211+
switch r.Type {
212+
case provider.VictoriaLogsDsProviderName:
213+
client, err = provider.NewVictoriaLogsClient(ctx, datasource)
214+
if err != nil {
215+
return nil, err
216+
}
218217

219-
type newLogStruct struct {
220-
Metric map[string]interface{}
221-
Message interface{}
222-
}
218+
options = provider.LogQueryOptions{
219+
VictoriaLogs: provider.VictoriaLogs{
220+
Query: QueryStr,
221+
},
222+
}
223+
case provider.ElasticSearchDsProviderName:
224+
client, err = provider.NewElasticSearchClient(ctx, datasource)
225+
if err != nil {
226+
return nil, err
227+
}
223228

224-
var newData []newLogStruct
225-
for _, v := range query {
226-
for _, message := range v.Message {
227-
newData = append(newData, newLogStruct{
228-
Metric: v.Metric,
229-
Message: message,
230-
})
229+
options = provider.LogQueryOptions{
230+
ElasticSearch: provider.Elasticsearch{
231+
Index: r.GetElasticSearchIndexName(),
232+
QueryType: "RawJson",
233+
RawJson: QueryStr,
234+
},
231235
}
232236
}
233237

234-
return tools.JsonMarshal(newData), nil
238+
query, _, err := client.Query(options)
239+
if err != nil {
240+
return nil, err
241+
}
242+
243+
return query, nil
235244
})
236245
}

internal/models/datasource.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,21 @@ func (d *AlertDataSource) GetEnabled() *bool {
7777
return d.Enabled
7878
}
7979

80-
type EsSearchReq struct {
80+
type SearchLogsContentReq struct {
81+
Type string `json:"type"`
8182
DatasourceId string `json:"datasourceId"`
8283
Index string `json:"index"`
8384
Query string `json:"query"`
8485
}
8586

86-
func (e EsSearchReq) GetIndexName() string {
87-
if strings.Contains(e.Index, "YYYY") && strings.Contains(e.Index, "MM") && strings.Contains(e.Index, "dd") {
88-
indexName := e.Index
87+
func (s SearchLogsContentReq) GetElasticSearchIndexName() string {
88+
if strings.Contains(s.Index, "YYYY") && strings.Contains(s.Index, "MM") && strings.Contains(s.Index, "dd") {
89+
indexName := s.Index
8990
indexName = strings.ReplaceAll(indexName, "YYYY", time.Now().Format("2006"))
9091
indexName = strings.ReplaceAll(indexName, "MM", time.Now().Format("01"))
9192
indexName = strings.ReplaceAll(indexName, "dd", time.Now().Format("02"))
9293
return indexName
9394
}
9495

95-
return e.Index
96-
}
97-
98-
type EsSearchRes struct {
99-
Data data `json:"data"`
96+
return s.Index
10097
}

internal/models/user_permissions.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,9 +435,9 @@ func PermissionsInfo() map[string]UserPermissions {
435435
Key: "修改故障中心基本信息",
436436
API: "/api/w8t/faultCenter/faultCenterReset",
437437
},
438-
"esSearch": {
439-
Key: "ElasticSearch搜索",
440-
API: "/api/w8t/datasource/esSearch",
438+
"searchViewLogsContent": {
439+
Key: "搜索VictoriaLogs数据源内容",
440+
API: "/api/w8t/datasource/searchViewLogsContent",
441441
},
442442
}
443443
}

internal/services/dashboard.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,15 @@ func (ds dashboardService) ListGrafanaDashboards(req interface{}) (data interfac
168168
return nil, fmt.Errorf("invalid grafana version, please change v10 or v11")
169169
}
170170

171-
get, err := tools.Get(nil, fmt.Sprintf("%s/api/search?%s", r.GrafanaHost, query), 10)
171+
requestURL := fmt.Sprintf("%s/api/search?%s", r.GrafanaHost, query)
172+
get, err := tools.Get(nil, requestURL, 10)
172173
if err != nil {
173-
return nil, err
174+
return nil, fmt.Errorf("请求错误, err: %s", err.Error())
174175
}
175176

176177
var d []models.GrafanaDashboardInfo
177178
if err := tools.ParseReaderBody(get.Body, &d); err != nil {
178-
return nil, err
179+
return nil, fmt.Errorf("读取body错误, err: %s", err.Error())
179180
}
180181

181182
return d, nil

internal/services/datasource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (ds datasourceService) WithAddClientToProviderPools(datasource models.Alert
127127
case provider.ElasticSearchDsProviderName:
128128
cli, err = provider.NewElasticSearchClient(ctx.Ctx, datasource)
129129
case provider.VictoriaLogsDsProviderName:
130-
cli, err = provider.NewVictoriaLogsProvider(ctx.Ctx, datasource)
130+
cli, err = provider.NewVictoriaLogsClient(ctx.Ctx, datasource)
131131
case provider.JaegerDsProviderName:
132132
cli, err = provider.NewJaegerClient(datasource)
133133
case "Kubernetes":

pkg/provider/check.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var datasourceFactories = map[string]ClientFactory{
4242
return &CloudWatchDummyChecker{}, nil
4343
},
4444
"VictoriaLogs": func(ds models.AlertDataSource) (HealthChecker, error) {
45-
return NewVictoriaLogsClient(ds)
45+
return NewVictoriaLogsClient(context.Background(), ds)
4646
},
4747
}
4848

pkg/provider/logs_victoria.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"io"
1010
"net/http"
1111
"net/url"
12-
"strconv"
1312
"time"
1413
"watchAlert/pkg/ctx"
1514

@@ -31,34 +30,26 @@ type (
3130
)
3231

3332
// NewVictoriaLogsClient 创建一个新的 VictoriaLogsProvider 实例。
34-
func NewVictoriaLogsClient(ds models.AlertDataSource) (VictoriaLogsProvider, error) {
35-
return VictoriaLogsProvider{
36-
URL: ds.HTTP.URL,
37-
ExternalLabels: ds.Labels,
38-
Username: ds.Auth.User,
39-
Password: ds.Auth.Pass,
40-
}, nil
41-
}
42-
43-
func NewVictoriaLogsProvider(ctx context.Context, datasource models.AlertDataSource) (LogsFactoryProvider, error) {
33+
func NewVictoriaLogsClient(ctx context.Context, datasource models.AlertDataSource) (LogsFactoryProvider, error) {
4434
return VictoriaLogsProvider{
4535
URL: datasource.HTTP.URL,
4636
Timeout: datasource.HTTP.Timeout,
4737
ExternalLabels: datasource.Labels,
38+
Username: datasource.Auth.User,
39+
Password: datasource.Auth.Pass,
4840
Ctx: ctx,
4941
}, nil
5042
}
5143

5244
func (v VictoriaLogsProvider) Query(options LogQueryOptions) ([]Logs, int, error) {
5345
curTime := time.Now()
5446

55-
if options.StartAt == "" {
56-
duration, _ := time.ParseDuration(strconv.Itoa(1) + "h")
57-
options.StartAt = curTime.Add(-duration).Format(time.RFC3339Nano)
47+
if options.StartAt == "" || options.StartAt == nil {
48+
options.StartAt = int32(tools.ParserDuration(curTime, 30, "m").Unix())
5849
}
5950

60-
if options.EndAt == "" {
61-
options.EndAt = curTime.Format(time.RFC3339Nano)
51+
if options.EndAt == "" || options.EndAt == nil {
52+
options.EndAt = int32(curTime.Unix())
6253
}
6354

6455
if options.VictoriaLogs.Limit == 0 {

0 commit comments

Comments
 (0)