| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | package elasticsearch | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2018-05-23 20:36:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb" | 
					
						
							| 
									
										
										
										
											2019-10-02 19:59:05 +08:00
										 |  |  | 	es "github.com/grafana/grafana/pkg/tsdb/elasticsearch/client" | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | // ElasticsearchExecutor represents a handler for handling elasticsearch datasource request
 | 
					
						
							| 
									
										
										
										
											2018-05-23 20:36:41 +08:00
										 |  |  | type ElasticsearchExecutor struct{} | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							|  |  |  | 	intervalCalculator tsdb.IntervalCalculator | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | // NewElasticsearchExecutor creates a new elasticsearch executor
 | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | func NewElasticsearchExecutor(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) { | 
					
						
							| 
									
										
										
										
											2018-05-23 20:36:41 +08:00
										 |  |  | 	return &ElasticsearchExecutor{}, nil | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | 	intervalCalculator = tsdb.NewIntervalCalculator(nil) | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | 	tsdb.RegisterTsdbQueryEndpoint("elasticsearch", NewElasticsearchExecutor) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | // Query handles an elasticsearch datasource request
 | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | func (e *ElasticsearchExecutor) Query(ctx context.Context, dsInfo *models.DataSource, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) { | 
					
						
							| 
									
										
										
										
											2018-05-23 20:36:41 +08:00
										 |  |  | 	if len(tsdbQuery.Queries) == 0 { | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("query contains no queries") | 
					
						
							| 
									
										
										
										
											2018-03-26 19:48:57 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | 	client, err := es.NewClient(ctx, dsInfo, tsdbQuery.TimeRange) | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-25 14:52:17 +08:00
										 |  |  | 	if tsdbQuery.Debug { | 
					
						
							|  |  |  | 		client.EnableDebug() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:09:58 +08:00
										 |  |  | 	query := newTimeSeriesQuery(client, tsdbQuery, intervalCalculator) | 
					
						
							|  |  |  | 	return query.execute() | 
					
						
							| 
									
										
										
										
											2018-03-23 23:50:16 +08:00
										 |  |  | } |