| 
									
										
										
										
											2019-10-31 17:48:05 +08:00
										 |  |  | import { DataQuery } 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
										 |  |  | 
 | 
					
						
							|  |  |  | export function addQuery(queries: DataQuery[], query?: Partial<DataQuery>): DataQuery[] { | 
					
						
							|  |  |  |   const q = query || {}; | 
					
						
							|  |  |  |   q.refId = getNextRefIdChar(queries); | 
					
						
							| 
									
										
										
										
											2021-01-19 21:04:54 +08:00
										 |  |  |   q.hide = false; | 
					
						
							| 
									
										
										
										
											2019-10-18 19:09:55 +08:00
										 |  |  |   return [...queries, q as DataQuery]; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											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]; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |