NewServer returns new GohanAPIServer
(configFile string)
| 195 | |
| 196 | //NewServer returns new GohanAPIServer |
| 197 | func NewServer(configFile string) (*Server, error) { |
| 198 | manager := schema.GetManager() |
| 199 | config := util.GetConfig() |
| 200 | err := config.ReadConfig(configFile) |
| 201 | if err != nil { |
| 202 | return nil, fmt.Errorf("Config load error: %s", err) |
| 203 | } |
| 204 | err = os.Chdir(path.Dir(configFile)) |
| 205 | if err != nil { |
| 206 | return nil, fmt.Errorf("Chdir error: %s", err) |
| 207 | } |
| 208 | err = l.SetUpLogging(config) |
| 209 | if err != nil { |
| 210 | return nil, fmt.Errorf("Logging setup error: %s", err) |
| 211 | } |
| 212 | log.Info("logging initialized") |
| 213 | |
| 214 | server := &Server{} |
| 215 | |
| 216 | m := martini.Classic() |
| 217 | m.Handlers() |
| 218 | m.Use(middleware.Logging()) |
| 219 | m.Use(middleware.Metrics()) |
| 220 | m.Use(martini.Recovery()) |
| 221 | m.Use(middleware.JSONURLs()) |
| 222 | m.Use(middleware.WithContext()) |
| 223 | |
| 224 | server.martini = m |
| 225 | |
| 226 | port := os.Getenv("PORT") |
| 227 | |
| 228 | if port == "" { |
| 229 | port = "9091" |
| 230 | } |
| 231 | |
| 232 | setupEditor(server) |
| 233 | |
| 234 | server.extensions = config.GetStringList("extension/use", []string{ |
| 235 | "goext", |
| 236 | "javascript", |
| 237 | "gohanscript", |
| 238 | "go", |
| 239 | }) |
| 240 | schema.DefaultExtension = config.GetString("extension/default", "javascript") |
| 241 | |
| 242 | manager.TimeLimit = time.Duration(config.GetInt("extension/timelimit", 30)) * time.Second |
| 243 | |
| 244 | if config.GetList("extension/timelimits", nil) != nil { |
| 245 | timeLimitList := config.GetList("extension/timelimits", nil) |
| 246 | for _, timeLimit := range timeLimitList { |
| 247 | cfgRaw := timeLimit.(map[string]interface{}) |
| 248 | cfgPath := cfgRaw["path"].(string) |
| 249 | cfgEvent := cfgRaw["event"].(string) |
| 250 | cfgTimeDuration := cfgRaw["timelimit"].(int) |
| 251 | |
| 252 | manager.TimeLimits = append(manager.TimeLimits, &schema.PathEventTimeLimit{ |
| 253 | PathRegex: regexp.MustCompile(cfgPath), |
| 254 | EventRegex: regexp.MustCompile(cfgEvent), |
no test coverage detected