| 
									
										
										
										
											2017-09-21 16:44:25 +08:00
										 |  |  | package tsdb | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type TsdbQueryEndpoint interface { | 
					
						
							| 
									
										
										
										
											2017-09-22 00:04:06 +08:00
										 |  |  | 	Query(ctx context.Context, ds *models.DataSource, query *TsdbQuery) (*Response, error) | 
					
						
							| 
									
										
										
										
											2017-09-21 16:44:25 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var registry map[string]GetTsdbQueryEndpointFn | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetTsdbQueryEndpointFn func(dsInfo *models.DataSource) (TsdbQueryEndpoint, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							|  |  |  | 	registry = make(map[string]GetTsdbQueryEndpointFn) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func getTsdbQueryEndpointFor(dsInfo *models.DataSource) (TsdbQueryEndpoint, error) { | 
					
						
							|  |  |  | 	if fn, exists := registry[dsInfo.Type]; exists { | 
					
						
							|  |  |  | 		executor, err := fn(dsInfo) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return nil, err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return executor, nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil, fmt.Errorf("Could not find executor for data source type: %s", dsInfo.Type) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func RegisterTsdbQueryEndpoint(pluginId string, fn GetTsdbQueryEndpointFn) { | 
					
						
							|  |  |  | 	registry[pluginId] = fn | 
					
						
							|  |  |  | } |