RunContext run server with context
(ctx context.Context)
| 104 | |
| 105 | // RunContext run server with context |
| 106 | func (s *Server) RunContext(ctx context.Context) { |
| 107 | s.startup(ctx) |
| 108 | |
| 109 | go func() { |
| 110 | if err := s.listenAndServe(); err != nil && err != http.ErrServerClosed { |
| 111 | s.Logger.Fatal("listen", zap.Error(err)) |
| 112 | } |
| 113 | }() |
| 114 | s.Logger.Info("listen", zap.String("addr", s.Addr)) |
| 115 | |
| 116 | if !isNil(s.Metrics) { |
| 117 | if err := s.Metrics.Startup(ctx); err != nil { |
| 118 | s.Logger.Fatal("metrics-startup", zap.Error(err)) |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | <-ctx.Done() |
| 123 | |
| 124 | s.shutdown(context.Background()) |
| 125 | } |
| 126 | |
| 127 | func isNil(c any) bool { |
| 128 | return c == nil || (reflect.ValueOf(c).Kind() == reflect.Ptr && reflect.ValueOf(c).IsNil()) |