diff --git a/pkg/simple/client/es/versions/error.go b/pkg/simple/client/es/versions/error.go new file mode 100644 index 000000000..f957bdc19 --- /dev/null +++ b/pkg/simple/client/es/versions/error.go @@ -0,0 +1,19 @@ +package versions + +type Error struct { + Status int `json:"status"` + Details *ErrorDetails `json:"error,omitempty"` +} + +type ErrorDetails struct { + Type string `json:"type"` + Reason string `json:"reason"` + ResourceType string `json:"resource.type,omitempty"` + ResourceId string `json:"resource.id,omitempty"` + Index string `json:"index,omitempty"` + Phase string `json:"phase,omitempty"` + Grouped bool `json:"grouped,omitempty"` + CausedBy map[string]interface{} `json:"caused_by,omitempty"` + RootCause []*ErrorDetails `json:"root_cause,omitempty"` + FailedShards []map[string]interface{} `json:"failed_shards,omitempty"` +} diff --git a/pkg/simple/client/es/versions/v5/v5.go b/pkg/simple/client/es/versions/v5/v5.go index 351d03a0f..0d6c032f4 100644 --- a/pkg/simple/client/es/versions/v5/v5.go +++ b/pkg/simple/client/es/versions/v5/v5.go @@ -28,6 +28,8 @@ import ( "github.com/elastic/go-elasticsearch/v5" "github.com/elastic/go-elasticsearch/v5/esapi" + + "kubesphere.io/kubesphere/pkg/simple/client/es/versions" ) type Elastic struct { @@ -112,12 +114,15 @@ func (e *Elastic) GetTotalHitCount(v interface{}) int64 { } func parseError(response *esapi.Response) error { - var e map[string]interface{} + var e versions.Error if err := json.NewDecoder(response.Body).Decode(&e); err != nil { return err } else { // Print the response status and error information. - e, _ := e["error"].(map[string]interface{}) - return fmt.Errorf("type: %v, reason: %v", e["type"], e["reason"]) + if len(e.Details.RootCause) != 0 { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.RootCause[0].Reason) + } else { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.Reason) + } } } diff --git a/pkg/simple/client/es/versions/v6/v6.go b/pkg/simple/client/es/versions/v6/v6.go index ef4e2ae74..3855cd710 100644 --- a/pkg/simple/client/es/versions/v6/v6.go +++ b/pkg/simple/client/es/versions/v6/v6.go @@ -28,6 +28,8 @@ import ( "github.com/elastic/go-elasticsearch/v6" "github.com/elastic/go-elasticsearch/v6/esapi" + + "kubesphere.io/kubesphere/pkg/simple/client/es/versions" ) type Elastic struct { @@ -112,12 +114,15 @@ func (e *Elastic) GetTotalHitCount(v interface{}) int64 { } func parseError(response *esapi.Response) error { - var e map[string]interface{} + var e versions.Error if err := json.NewDecoder(response.Body).Decode(&e); err != nil { return err } else { // Print the response status and error information. - e, _ := e["error"].(map[string]interface{}) - return fmt.Errorf("type: %v, reason: %v", e["type"], e["reason"]) + if len(e.Details.RootCause) != 0 { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.RootCause[0].Reason) + } else { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.Reason) + } } } diff --git a/pkg/simple/client/es/versions/v7/v7.go b/pkg/simple/client/es/versions/v7/v7.go index f79700f9a..38b98ae22 100644 --- a/pkg/simple/client/es/versions/v7/v7.go +++ b/pkg/simple/client/es/versions/v7/v7.go @@ -28,6 +28,8 @@ import ( "github.com/elastic/go-elasticsearch/v7" "github.com/elastic/go-elasticsearch/v7/esapi" + + "kubesphere.io/kubesphere/pkg/simple/client/es/versions" ) type Elastic struct { @@ -115,12 +117,15 @@ func (e *Elastic) GetTotalHitCount(v interface{}) int64 { } func parseError(response *esapi.Response) error { - var e map[string]interface{} + var e versions.Error if err := json.NewDecoder(response.Body).Decode(&e); err != nil { return err } else { // Print the response status and error information. - e, _ := e["error"].(map[string]interface{}) - return fmt.Errorf("type: %v, reason: %v", e["type"], e["reason"]) + if len(e.Details.RootCause) != 0 { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.RootCause[0].Reason) + } else { + return fmt.Errorf("type: %v, reason: %v", e.Details.Type, e.Details.Reason) + } } } diff --git a/pkg/simple/client/logging/elasticsearch/elasticsearch_test.go b/pkg/simple/client/logging/elasticsearch/elasticsearch_test.go index dbc716c1e..eb3da9f01 100644 --- a/pkg/simple/client/logging/elasticsearch/elasticsearch_test.go +++ b/pkg/simple/client/logging/elasticsearch/elasticsearch_test.go @@ -133,7 +133,7 @@ func TestCountLogsByInterval(t *testing.T) { fakeVersion: es.ElasticV7, fakeResp: "es7_count_logs_by_interval_400.json", fakeCode: http.StatusBadRequest, - expectedErr: "type: search_phase_execution_exception, reason: all shards failed", + expectedErr: "type: search_phase_execution_exception, reason: Unable to parse interval [30m0s]", }, { fakeVersion: es.ElasticV7,