| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | package setting | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"strconv" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"gopkg.in/ini.v1" | 
					
						
							| 
									
										
										
										
											2023-01-30 16:26:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/util" | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | // @deprecated -- should use `featuremgmt.FeatureToggles`
 | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | func (cfg *Cfg) readFeatureToggles(iniFile *ini.File) error { | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 	section := iniFile.Section("feature_toggles") | 
					
						
							|  |  |  | 	toggles, err := ReadFeatureTogglesFromInitFile(section) | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 	cfg.IsFeatureToggleEnabled = func(key string) bool { return toggles[key] } | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | func ReadFeatureTogglesFromInitFile(featureTogglesSection *ini.Section) (map[string]bool, error) { | 
					
						
							|  |  |  | 	featureToggles := make(map[string]bool, 10) | 
					
						
							| 
									
										
										
										
											2021-12-20 22:33:11 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// parse the comma separated list in `enable`.
 | 
					
						
							|  |  |  | 	featuresTogglesStr := valueAsString(featureTogglesSection, "enable", "") | 
					
						
							|  |  |  | 	for _, feature := range util.SplitString(featuresTogglesStr) { | 
					
						
							|  |  |  | 		featureToggles[feature] = true | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// read all other settings under [feature_toggles]. If a toggle is
 | 
					
						
							|  |  |  | 	// present in both the value in `enable` is overridden.
 | 
					
						
							|  |  |  | 	for _, v := range featureTogglesSection.Keys() { | 
					
						
							|  |  |  | 		if v.Name() == "enable" { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		b, err := strconv.ParseBool(v.Value()) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return featureToggles, err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		featureToggles[v.Name()] = b | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return featureToggles, nil | 
					
						
							|  |  |  | } |