| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | package common | 
					
						
							| 
									
										
										
										
											2014-02-14 23:56:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2014-05-30 19:51:19 +02:00
										 |  |  | 	"flag" | 
					
						
							| 
									
										
										
										
											2014-02-22 01:53:09 +01:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2014-06-23 12:55:38 +01:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2014-07-26 11:24:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/rakyll/globalconf" | 
					
						
							| 
									
										
										
										
											2014-02-14 23:56:09 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-27 17:15:44 +02:00
										 |  |  | // Config struct | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | type ConfigManager struct { | 
					
						
							|  |  |  | 	ExecPath string | 
					
						
							|  |  |  | 	Debug    bool | 
					
						
							| 
									
										
										
										
											2014-07-11 16:04:09 +02:00
										 |  |  | 	Diff     bool | 
					
						
							| 
									
										
										
										
											2014-07-14 00:37:50 +02:00
										 |  |  | 	DiffType string | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | 	Paranoia bool | 
					
						
							| 
									
										
										
										
											2014-10-14 11:48:52 +02:00
										 |  |  | 	VmType   int | 
					
						
							| 
									
										
										
										
											2014-05-30 19:51:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	conf *globalconf.GlobalConf | 
					
						
							| 
									
										
										
										
											2014-02-14 23:56:09 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-27 17:15:44 +02:00
										 |  |  | // Read config | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2014-06-23 12:55:38 +01:00
										 |  |  | // Initialize Config from Config File | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | func ReadConfig(ConfigFile string, Datadir string, EnvPrefix string) *ConfigManager { | 
					
						
							| 
									
										
										
										
											2015-03-06 02:46:56 +01:00
										 |  |  | 	if !FileExist(ConfigFile) { | 
					
						
							|  |  |  | 		// create ConfigFile if it does not exist, otherwise | 
					
						
							|  |  |  | 		// globalconf will panic when trying to persist flags. | 
					
						
							|  |  |  | 		fmt.Printf("config file '%s' doesn't exist, creating it\n", ConfigFile) | 
					
						
							|  |  |  | 		os.Create(ConfigFile) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	g, err := globalconf.NewWithOptions(&globalconf.Options{ | 
					
						
							|  |  |  | 		Filename:  ConfigFile, | 
					
						
							|  |  |  | 		EnvPrefix: EnvPrefix, | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fmt.Println(err) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		g.ParseAll() | 
					
						
							| 
									
										
										
										
											2014-02-14 23:56:09 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-06 02:46:56 +01:00
										 |  |  | 	cfg := &ConfigManager{ExecPath: Datadir, Debug: true, conf: g, Paranoia: true} | 
					
						
							|  |  |  | 	return cfg | 
					
						
							| 
									
										
										
										
											2014-02-14 23:56:09 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-23 12:55:38 +01:00
										 |  |  | // provides persistence for flags | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | func (c *ConfigManager) Save(key string, value interface{}) { | 
					
						
							|  |  |  | 	f := &flag.Flag{Name: key, Value: newConfValue(value)} | 
					
						
							| 
									
										
										
										
											2014-05-30 19:51:19 +02:00
										 |  |  | 	c.conf.Set("", f) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | func (c *ConfigManager) Delete(key string) { | 
					
						
							|  |  |  | 	c.conf.Delete("", key) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // private type implementing flag.Value | 
					
						
							| 
									
										
										
										
											2014-05-30 19:51:19 +02:00
										 |  |  | type confValue struct { | 
					
						
							|  |  |  | 	value string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 17:30:51 +01:00
										 |  |  | // generic constructor to allow persising non-string values directly | 
					
						
							|  |  |  | func newConfValue(value interface{}) *confValue { | 
					
						
							|  |  |  | 	return &confValue{fmt.Sprintf("%v", value)} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-30 19:51:19 +02:00
										 |  |  | func (self confValue) String() string     { return self.value } | 
					
						
							|  |  |  | func (self confValue) Set(s string) error { self.value = s; return nil } |