| 
									
										
										
										
											2021-10-30 01:57:24 +08:00
										 |  |  | import { DataQuery, DataSourceInstanceSettings, DataSourceRef, getDataSourceRef } from '@grafana/data'; | 
					
						
							| 
									
										
										
										
											2019-03-15 00:20:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-09 21:16:35 +08:00
										 |  |  | export const getNextRefIdChar = (queries: DataQuery[]): string => { | 
					
						
							| 
									
										
										
										
											2021-06-23 21:23:02 +08:00
										 |  |  |   for (let num = 0; ; num++) { | 
					
						
							|  |  |  |     const refId = getRefId(num); | 
					
						
							|  |  |  |     if (!queries.some((query) => query.refId === refId)) { | 
					
						
							|  |  |  |       return refId; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2019-03-15 00:20:33 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-10-18 19:09:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 01:57:24 +08:00
										 |  |  | export function addQuery(queries: DataQuery[], query?: Partial<DataQuery>, datasource?: DataSourceRef): DataQuery[] { | 
					
						
							| 
									
										
										
										
											2019-10-18 19:09:55 +08:00
										 |  |  |   const q = query || {}; | 
					
						
							|  |  |  |   q.refId = getNextRefIdChar(queries); | 
					
						
							| 
									
										
										
										
											2021-01-19 21:04:54 +08:00
										 |  |  |   q.hide = false; | 
					
						
							| 
									
										
										
										
											2021-10-13 23:49:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (!q.datasource && datasource) { | 
					
						
							|  |  |  |     q.datasource = datasource; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-18 19:09:55 +08:00
										 |  |  |   return [...queries, q as DataQuery]; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-08-20 17:32:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 23:49:40 +08:00
										 |  |  | export function updateQueries( | 
					
						
							|  |  |  |   newSettings: DataSourceInstanceSettings, | 
					
						
							|  |  |  |   queries: DataQuery[], | 
					
						
							|  |  |  |   extensionID: string, // pass this in because importing it creates a circular dependency
 | 
					
						
							|  |  |  |   dsSettings?: DataSourceInstanceSettings | 
					
						
							|  |  |  | ): DataQuery[] { | 
					
						
							| 
									
										
										
										
											2021-10-30 01:57:24 +08:00
										 |  |  |   const datasource = getDataSourceRef(newSettings); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 23:49:40 +08:00
										 |  |  |   if (!newSettings.meta.mixed && dsSettings?.meta.mixed) { | 
					
						
							|  |  |  |     return queries.map((q) => { | 
					
						
							|  |  |  |       if (q.datasource !== extensionID) { | 
					
						
							| 
									
										
										
										
											2021-10-30 01:57:24 +08:00
										 |  |  |         q.datasource = datasource; | 
					
						
							| 
									
										
										
										
											2021-10-13 23:49:40 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |       return q; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } else if (!newSettings.meta.mixed && dsSettings?.meta.id !== newSettings.meta.id) { | 
					
						
							|  |  |  |     // we are changing data source type, clear queries
 | 
					
						
							| 
									
										
										
										
											2021-10-30 01:57:24 +08:00
										 |  |  |     return [{ refId: 'A', datasource }]; | 
					
						
							| 
									
										
										
										
											2021-10-13 23:49:40 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return queries; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-20 17:32:10 +08:00
										 |  |  | export function isDataQuery(url: string): boolean { | 
					
						
							|  |  |  |   if ( | 
					
						
							|  |  |  |     url.indexOf('api/datasources/proxy') !== -1 || | 
					
						
							|  |  |  |     url.indexOf('api/tsdb/query') !== -1 || | 
					
						
							|  |  |  |     url.indexOf('api/ds/query') !== -1 | 
					
						
							|  |  |  |   ) { | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function isLocalUrl(url: string) { | 
					
						
							|  |  |  |   return !url.match(/^http/); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-06-23 21:23:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function getRefId(num: number): string { | 
					
						
							|  |  |  |   const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (num < letters.length) { | 
					
						
							|  |  |  |     return letters[num]; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     return getRefId(Math.floor(num / letters.length) - 1) + letters[num % letters.length]; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |