Run the application
(opts ...Option)
| 345 | |
| 346 | // Run the application |
| 347 | func (a *application) Run(opts ...Option) { |
| 348 | defer rogger.FlushLogger() |
| 349 | a.isShutdowning = 0 |
| 350 | a.init() |
| 351 | <-statInited |
| 352 | |
| 353 | for _, opt := range opts { |
| 354 | opt(a.opt) |
| 355 | } |
| 356 | |
| 357 | for _, env := range os.Environ() { |
| 358 | if strings.HasPrefix(env, grace.InheritFdPrefix) { |
| 359 | TLOG.Infof("env %s", env) |
| 360 | } |
| 361 | } |
| 362 | |
| 363 | // add adminF |
| 364 | if _, ok := a.tarsConfig["AdminObj"]; ok { |
| 365 | adf := new(adminf.AdminF) |
| 366 | ad := newAdmin(a) |
| 367 | AddServant(adf, ad, "AdminObj") |
| 368 | } |
| 369 | |
| 370 | lisDone := &sync.WaitGroup{} |
| 371 | for _, obj := range a.objRunList { |
| 372 | if s, ok := a.httpSvrs[obj]; ok { |
| 373 | lisDone.Add(1) |
| 374 | go func(obj string) { |
| 375 | addr := s.Addr |
| 376 | TLOG.Infof("%s http server start on %s", obj, s.Addr) |
| 377 | if addr == "" { |
| 378 | lisDone.Done() |
| 379 | a.teerDown(fmt.Errorf("empty addr for %s", obj)) |
| 380 | return |
| 381 | } |
| 382 | ln, err := grace.CreateListener("tcp", addr) |
| 383 | if err != nil { |
| 384 | lisDone.Done() |
| 385 | a.teerDown(fmt.Errorf("start http server for %s failed: %v", obj, err)) |
| 386 | return |
| 387 | } |
| 388 | |
| 389 | lisDone.Done() |
| 390 | if s.TLSConfig != nil { |
| 391 | err = s.ServeTLS(ln, "", "") |
| 392 | } else { |
| 393 | err = s.Serve(ln) |
| 394 | } |
| 395 | if err != nil { |
| 396 | if err == http.ErrServerClosed { |
| 397 | TLOG.Infof("%s http server stop: %v", obj, err) |
| 398 | } else { |
| 399 | a.teerDown(fmt.Errorf("%s server stop: %v", obj, err)) |
| 400 | } |
| 401 | } |
| 402 | }(obj) |
| 403 | continue |
| 404 | } |
no test coverage detected