github.com/uppal0016/docker_new@v0.0.0-20240123060250-1c98be13ac2c/api/server/router/system/system_routes.go (about) 1 package system 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "time" 7 8 "github.com/Sirupsen/logrus" 9 "github.com/docker/docker/api" 10 "github.com/docker/docker/api/server/httputils" 11 "github.com/docker/docker/pkg/ioutils" 12 "github.com/docker/engine-api/types" 13 "github.com/docker/engine-api/types/events" 14 "github.com/docker/engine-api/types/filters" 15 timetypes "github.com/docker/engine-api/types/time" 16 "golang.org/x/net/context" 17 ) 18 19 func optionsHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 20 w.WriteHeader(http.StatusOK) 21 return nil 22 } 23 24 func pingHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 25 _, err := w.Write([]byte{'O', 'K'}) 26 return err 27 } 28 29 func (s *systemRouter) getInfo(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 30 info, err := s.backend.SystemInfo() 31 if err != nil { 32 return err 33 } 34 35 return httputils.WriteJSON(w, http.StatusOK, info) 36 } 37 38 func (s *systemRouter) getVersion(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 39 info := s.backend.SystemVersion() 40 info.APIVersion = api.DefaultVersion.String() 41 42 return httputils.WriteJSON(w, http.StatusOK, info) 43 } 44 45 func (s *systemRouter) getEvents(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 46 if err := httputils.ParseForm(r); err != nil { 47 return err 48 } 49 since, sinceNano, err := timetypes.ParseTimestamps(r.Form.Get("since"), -1) 50 if err != nil { 51 return err 52 } 53 until, untilNano, err := timetypes.ParseTimestamps(r.Form.Get("until"), -1) 54 if err != nil { 55 return err 56 } 57 58 var timeout <-chan time.Time 59 if until > 0 || untilNano > 0 { 60 dur := time.Unix(until, untilNano).Sub(time.Now()) 61 timeout = time.NewTimer(dur).C 62 } 63 64 ef, err := filters.FromParam(r.Form.Get("filters")) 65 if err != nil { 66 return err 67 } 68 69 w.Header().Set("Content-Type", "application/json") 70 output := ioutils.NewWriteFlusher(w) 71 defer output.Close() 72 output.Flush() 73 74 enc := json.NewEncoder(output) 75 76 buffered, l := s.backend.SubscribeToEvents(since, sinceNano, ef) 77 defer s.backend.UnsubscribeFromEvents(l) 78 79 for _, ev := range buffered { 80 if err := enc.Encode(ev); err != nil { 81 return err 82 } 83 } 84 85 for { 86 select { 87 case ev := <-l: 88 jev, ok := ev.(events.Message) 89 if !ok { 90 logrus.Warnf("unexpected event message: %q", ev) 91 continue 92 } 93 if err := enc.Encode(jev); err != nil { 94 return err 95 } 96 case <-timeout: 97 return nil 98 case <-ctx.Done(): 99 logrus.Debug("Client context cancelled, stop sending events") 100 return nil 101 } 102 } 103 } 104 105 func (s *systemRouter) postAuth(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 106 var config *types.AuthConfig 107 err := json.NewDecoder(r.Body).Decode(&config) 108 r.Body.Close() 109 if err != nil { 110 return err 111 } 112 status, token, err := s.backend.AuthenticateToRegistry(ctx, config) 113 if err != nil { 114 return err 115 } 116 return httputils.WriteJSON(w, http.StatusOK, &types.AuthResponse{ 117 Status: status, 118 IdentityToken: token, 119 }) 120 }