events.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package lib
  2. import (
  3. "io"
  4. "net/url"
  5. "time"
  6. "github.com/docker/docker/pkg/parsers/filters"
  7. "github.com/docker/docker/pkg/timeutils"
  8. )
  9. // EventsOptions hold parameters to filter events with.
  10. type EventsOptions struct {
  11. Since string
  12. Until string
  13. Filters filters.Args
  14. }
  15. // Events returns a stream of events in the daemon in a ReadCloser.
  16. // It's up to the caller to close the stream.
  17. func (cli *Client) Events(options EventsOptions) (io.ReadCloser, error) {
  18. var query url.Values
  19. ref := time.Now()
  20. if options.Since != "" {
  21. ts, err := timeutils.GetTimestamp(options.Since, ref)
  22. if err != nil {
  23. return nil, err
  24. }
  25. query.Set("since", ts)
  26. }
  27. if options.Until != "" {
  28. ts, err := timeutils.GetTimestamp(options.Until, ref)
  29. if err != nil {
  30. return nil, err
  31. }
  32. query.Set("until", ts)
  33. }
  34. if options.Filters.Len() > 0 {
  35. filterJSON, err := filters.ToParam(options.Filters)
  36. if err != nil {
  37. return nil, err
  38. }
  39. query.Set("filters", filterJSON)
  40. }
  41. serverResponse, err := cli.GET("/events", query, nil)
  42. if err != nil {
  43. return nil, err
  44. }
  45. return serverResponse.body, nil
  46. }