// Reads a ServerConfig from a JSON file. func ReadServerConfigFromFile(path string) (*ServerConfig, error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() data, err := ioutil.ReadAll(file) if err != nil { return nil, err } data = base.ConvertBackQuotedStrings(data) var config *ServerConfig if err := json.Unmarshal(data, &config); err != nil { return nil, err } // Validation: if err := config.setupAndValidateDatabases(); err != nil { return nil, err } return config, nil }
// Reads a ServerConfig from raw data func ReadServerConfigFromData(data []byte) (*ServerConfig, error) { data = base.ConvertBackQuotedStrings(data) var config *ServerConfig if err := json.Unmarshal(data, &config); err != nil { return nil, err } // Validation: for name, dbConfig := range config.Databases { dbConfig.setup(name) } return config, nil }
// Reads a ServerConfig from raw data func ReadServerConfigFromData(data []byte) (*ServerConfig, error) { data = base.ConvertBackQuotedStrings(data) var config *ServerConfig if err := json.Unmarshal(data, &config); err != nil { return nil, err } // Validation: if err := config.setupAndValidateDatabases(); err != nil { return nil, err } return config, nil }
// Fetch a configuration for a database from the ConfigServer func (sc *ServerContext) getDbConfigFromServer(dbName string) (*DbConfig, error) { if sc.config.ConfigServer == nil { return nil, base.HTTPErrorf(http.StatusNotFound, "not_found") } urlStr := *sc.config.ConfigServer if !strings.HasSuffix(urlStr, "/") { urlStr += "/" } urlStr += url.QueryEscape(dbName) res, err := sc.HTTPClient.Get(urlStr) if err != nil { return nil, base.HTTPErrorf(http.StatusBadGateway, "Error contacting config server: %v", err) } else if res.StatusCode >= 300 { return nil, base.HTTPErrorf(res.StatusCode, res.Status) } var config DbConfig var bodyBytes []byte defer res.Body.Close() if bodyBytes, err = ioutil.ReadAll(res.Body); err != nil { return nil, err } j := json.NewDecoder(bytes.NewReader(base.ConvertBackQuotedStrings(bodyBytes))) if err = j.Decode(&config); err != nil { return nil, base.HTTPErrorf(http.StatusBadGateway, "Bad response from config server: %v", err) } if err = config.setup(dbName); err != nil { return nil, err } return &config, nil }