From 5d8d8d298809906b0f084097c6d0459b3dcf0433 Mon Sep 17 00:00:00 2001 From: varnit goyal Date: Mon, 18 Nov 2024 06:58:14 +0530 Subject: [PATCH] TP-5555 | last seen support --- pkg/utils/elastic_query_util.go | 5 +++++ service/searchService.go | 26 ++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/pkg/utils/elastic_query_util.go b/pkg/utils/elastic_query_util.go index 25c4c2e..2513d56 100644 --- a/pkg/utils/elastic_query_util.go +++ b/pkg/utils/elastic_query_util.go @@ -36,6 +36,7 @@ const ( TermsAggregationQueryWithOrder = `"terms": { "field": "%s", "size": %d, "order" : { "%s" : "%s" } }` TermsAggregationQueryWithoutSize = `"terms": { "field": "%s" }` CustomQuery = `"%s": %s` + CustomQueryWithBraces = `"%s": {%s}` BulkUpdateQuery = `{ "update": {"_index": "%s", "_id": "%s" } }` TermsSubQuery = `{ "terms": { "%s": [ %s ] } }` MultiSortQuery = `"sort":[ %s ]` @@ -67,6 +68,10 @@ func CreateCustomQuery(key string, query string) string { return fmt.Sprintf(CustomQuery, key, query) } +func CreateCustomQueryWithBraces(key string, query string) string { + return fmt.Sprintf(CustomQueryWithBraces, key, query) +} + func CreateTermSubQuery(key string, ids ...string) string { var termQueries []string for _, id := range ids { diff --git a/service/searchService.go b/service/searchService.go index e5d368a..644b6d8 100644 --- a/service/searchService.go +++ b/service/searchService.go @@ -27,6 +27,7 @@ func (s *SearchService) Search(c *gin.Context) { func (s *SearchService) GetErrorDetails(c *gin.Context) { error_hash := c.Query("error_hash") + project_id := c.Query("project_id") from := c.DefaultQuery("from", "0") fromInNumber, err := strconv.ParseInt(from, 10, 64) @@ -37,7 +38,10 @@ func (s *SearchService) GetErrorDetails(c *gin.Context) { } term_query := utils.CreateTermSubQuery("error_hash", error_hash) - search_query := utils.CreateSearchQuery(term_query) + project_id_term_query := utils.CreateTermSubQuery("project_id", project_id) + mustQuery := utils.CreateMustQuery(term_query, project_id_term_query) + boolQuery := utils.CreateBoolQuery(mustQuery) + search_query := utils.CreateSearchQuery(boolQuery) size_query := utils.CreateSizeQuery(1) sort_query := utils.CreateSortQuery("created_at", "desc", "") after_query := utils.CreateFromQuery(fromInNumber) @@ -82,6 +86,7 @@ func (s *SearchService) GetErrorList(c *gin.Context) { projectId := c.Query("project_id") size := c.DefaultQuery("size", "10") afterKey := c.DefaultQuery("after_key", "") + sortKey := c.DefaultQuery("sort_key", "lastSeen") sizeInNumber, sizeParseError := strconv.Atoi(size) @@ -94,7 +99,22 @@ func (s *SearchService) GetErrorList(c *gin.Context) { search_query := utils.CreateSearchQuery(term_query) size_query := utils.CreateSizeQuery(0) top_hits_aggs_name_query := utils.BuildAggregationQuery("unique_errors", utils.CreateTopHitsAggsQuery(1, []string{"error", "significant_stack", "created_at", "error_hash"})) - top_hits_aggs_query := utils.CreateAggregationQuery(top_hits_aggs_name_query) + last_seen_aggs_query := utils.BuildAggregationQuery("last_seen", utils.CreateMaxAggregationQuery("created_at")) + first_seen_aggs_query := utils.BuildAggregationQuery("first_seen", utils.CreateMinAggregationQuery("created_at")) + sortQuery := utils.CreateSortQuery("last_seen", "desc", "") + + if sortKey == "lastSeen" { + sortQuery = utils.CreateSortQuery("last_seen", "desc", "") + } + if sortKey == "firstSeen" { + sortQuery = utils.CreateSortQuery("first_seen", "desc", "") + } + if sortKey == "count" { + sortQuery = utils.CreateSortQuery("_count", "desc", "") + } + customSortQuery := utils.CreateCustomQueryWithBraces("bucket_sort", sortQuery) + customFinalSortQuery := utils.CreateCustomQueryWithBraces("sorting", customSortQuery) + top_hits_aggs_query := utils.CreateAggregationQuery(top_hits_aggs_name_query, last_seen_aggs_query, first_seen_aggs_query, customFinalSortQuery) //building composite aggregation composite_term_query := utils.CreateTermsAggregationQueryWithoutSize("error_hash") @@ -103,8 +123,6 @@ func (s *SearchService) GetErrorList(c *gin.Context) { compositeAggsQuery := utils.CreateAggregationQuery(composite_aggs_query) - //final_aggs_query := utils.CreateAggregationQuery(top_hits_value_count, compositeAggsQuery) - final_query := utils.CreateEsQuery(search_query, size_query, compositeAggsQuery) println("%s", final_query)