diff --git a/src/main.go b/src/main.go index eab109c09dcda668c15d0f46019cd613e518c04f..752dd2198ca603da03ec0eeccabdaf722e5ef075 100644 --- a/src/main.go +++ b/src/main.go @@ -45,6 +45,12 @@ func main() { // redis client go client.GetRedisClient() + // 初始化OpenSearch的索引 + err := service.CheckAndCreateIndex() + if err != nil { + conf.Logger.Fatal("failed to init OpenSearch index.", zap.Error(err)) + } + //启动定时任务 cron.StartCron() service.PushWorkOrderMessage() diff --git a/src/service/alert.go b/src/service/alert.go index 5665d6a718c2c384f89dd7b665b54249eeca06b3..9531e8003d2cab91edab79182d7276755ded19ad 100644 --- a/src/service/alert.go +++ b/src/service/alert.go @@ -283,13 +283,50 @@ var ( }`) ) -func (a *AlertSvc) CreateIndex() error { +func CheckAndCreateIndex() (err error) { + exist, err := checkIndexExists(OpenSearchIndex) + if err != nil { + return + } + + if exist { + return nil + } + + err = CreateIndex(OpenSearchIndex) + if err != nil { + return err + } + return nil +} + +func checkIndexExists(indexName string) (exist bool, err error) { + cli, err := client.GetOpenSearch() + if err != nil { + return + } + req := opensearchapi.IndicesExistsRequest{Index: []string{indexName}} + res, err := req.Do(context.Background(), cli) + if err != nil { + return false, err + } + defer res.Body.Close() + if res.StatusCode == http.StatusOK { + return true, nil + } else if res.StatusCode == http.StatusNotFound { + return false, nil + } else { + return false, fmt.Errorf("请求失败,状态码:%d", res.StatusCode) + } +} + +func CreateIndex(indexName string) error { cli, err := client.GetOpenSearch() if err != nil { return err } res := opensearchapi.IndicesCreateRequest{ - Index: OpenSearchIndex, + Index: indexName, Body: Mapping, } do, err := res.Do(context.Background(), cli)