// ESBaseQuery builds the base query that both ESCount and ESStat share func ESBaseQuery(now time.Time, indexer ESIndexer, l ElasticHosts, filter elastic.Query, sduration, eduration string, size int) (*ElasticRequest, error) { start, err := opentsdb.ParseDuration(sduration) if err != nil { return nil, err } var end opentsdb.Duration if eduration != "" { end, err = opentsdb.ParseDuration(eduration) if err != nil { return nil, err } } st := now.Add(time.Duration(-start)) en := now.Add(time.Duration(-end)) r := ElasticRequest{ Indexer: indexer, Start: &st, End: &en, Source: elastic.NewSearchSource().Size(size), } var q elastic.Query q = elastic.NewRangeQuery(indexer.TimeField).Gte(st).Lte(en) r.Source = r.Source.Query(elastic.NewBoolQuery().Must(q, filter)) return &r, nil }
func (e *Elastic) GetAnnotations(start, end *time.Time, source, host, creationUser, owner, category string) (annotate.Annotations, error) { annotations := annotate.Annotations{} s := elastic.NewSearchSource() if start != nil && end != nil { startQ := elastic.NewRangeQuery(annotate.EndDate).Gte(start) endQ := elastic.NewRangeQuery(annotate.StartDate).Lte(end) s = s.Query(elastic.NewBoolQuery().Must(startQ, endQ)) } if source != "" { s = s.Query(elastic.NewTermQuery(annotate.Source, source)) } if host != "" { s = s.Query(elastic.NewTermQuery(annotate.Host, host)) } if creationUser != "" { s = s.Query(elastic.NewTermQuery(annotate.CreationUser, creationUser)) } if owner != "" { s = s.Query(elastic.NewTermQuery(annotate.Owner, owner)) } if category != "" { s = s.Query(elastic.NewTermQuery(annotate.Category, category)) } res, err := e.Search(e.index).Query(s).Size(e.maxResults).Do() if err != nil { return annotations, err } var aType annotate.Annotation for _, item := range res.Each(reflect.TypeOf(aType)) { a := item.(annotate.Annotation) annotations = append(annotations, a) } return annotations, nil }