func FillServiceConfigFromCli(config *proxy.ServiceConfig, c *cli.Context) { brokerConfig := proxy.BrokerConfig{ Id: "broker", Type: "rabbitmq", Host: c.String("amqp-host"), User: c.String("amqp-user"), Password: c.String("amqp-password"), } brokers := map[string]proxy.BrokerConfig{} brokers[brokerConfig.Id] = brokerConfig config.Brokers = brokers workerConfig := FcgiWorkerConfig{ Id: "worker", Type: "fastcgi", Host: c.String("fcgi-host"), Timeout: c.Int("fcgi-timeout"), ServerProtocol: c.String("fcgi-server-protocol"), ScriptName: c.String("fcgi-script-name"), ScriptFilename: c.String("fcgi-script-filename"), RequestUri: c.String("fcgi-request-uri"), } workers := map[string]proxy.WorkerConfig{} workers[workerConfig.GetId()] = &workerConfig config.Workers = workers routeConfig := proxy.RouteConfig{ Name: c.String("instance-name"), Broker: brokerConfig.Id, Worker: workerConfig.GetId(), Queue: c.String("amqp-queue"), PrefetchCount: c.Int("amqp-prefetch-count"), } config.Routes = append(config.Routes, routeConfig) }
func FillServiceConfigFromFile(config *proxy.ServiceConfig, filename string) error { viper.SetConfigName(filename) viper.AddConfigPath(".") // look in the working dir err := viper.ReadInConfig() if err != nil { return fmt.Errorf("Error when loading config: %s", err) } //log.Println(viper.Get("Routes")) _brokers := []proxy.BrokerConfig{} err = viper.UnmarshalKey("Brokers", &_brokers) if err != nil { return fmt.Errorf("Error when parsing Brokers: %v", err) } brokers := map[string]proxy.BrokerConfig{} for _, broker := range _brokers { brokers[broker.Id] = broker } log.Println("") config.Brokers = brokers _workers := []FcgiWorkerConfig{} err = viper.UnmarshalKey("Workers", &_workers) if err != nil { return fmt.Errorf("Error when parsing Workers: %v", err) } workers := map[string]proxy.WorkerConfig{} for _, worker := range _workers { workers[worker.GetId()] = &worker } config.Workers = workers err = viper.UnmarshalKey("Routes", &config.Routes) if err != nil { return fmt.Errorf("Error when parsing Routes: %v", err) } for _, route := range config.Routes { _, hasBroker := brokers[route.Broker] _, hasWorker := workers[route.Worker] if !hasWorker || !hasBroker { return fmt.Errorf("Config for route %s is not valid", route.Name) } } return nil }