github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/manager/handler.go (about)

     1  package manager
     2  
     3  import (
     4  	"fmt"
     5  
     6  	log "github.com/Sirupsen/logrus"
     7  	"github.com/samalba/dockerclient"
     8  	"github.com/shipyard/shipyard"
     9  	"github.com/shipyard/shipyard/utils"
    10  )
    11  
    12  type (
    13  	EventHandler struct {
    14  		Manager Manager
    15  	}
    16  )
    17  
    18  func (h *EventHandler) Handle(e *dockerclient.Event) error {
    19  	log.Infof("event: date=%d status=%s container=%s", e.Time, e.Status, e.ID[:12])
    20  	h.logDockerEvent(e)
    21  	return nil
    22  }
    23  
    24  func (h *EventHandler) logDockerEvent(e *dockerclient.Event) error {
    25  	info, err := h.Manager.Container(e.ID)
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	ts, err := utils.FromUnixTimestamp(e.Time)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	evt := &shipyard.Event{
    36  		Type: e.Status,
    37  		Message: fmt.Sprintf("action=%s container=%s",
    38  			e.Status, e.ID[:12]),
    39  		Time:          *ts,
    40  		ContainerInfo: info,
    41  		Tags:          []string{"docker"},
    42  	}
    43  	if err := h.Manager.SaveEvent(evt); err != nil {
    44  		return err
    45  	}
    46  	return nil
    47  }