github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/notify/task_failure_handler.go (about)

     1  package notify
     2  
     3  import (
     4  	"github.com/evergreen-ci/evergreen"
     5  	"github.com/evergreen-ci/evergreen/model/task"
     6  	"github.com/evergreen-ci/evergreen/web"
     7  	"github.com/mongodb/grip"
     8  )
     9  
    10  // Handler for task failure notifications. Implements NotificationHandler from
    11  // notification_handler.go.
    12  type TaskFailureHandler struct {
    13  	TaskNotificationHandler
    14  	Name string
    15  }
    16  
    17  func (self *TaskFailureHandler) GetNotifications(ae *web.App, key *NotificationKey) ([]Email, error) {
    18  	var emails []Email
    19  	preface := mciFailurePreface
    20  	if key.NotificationRequester == evergreen.PatchVersionRequester {
    21  		preface = patchFailurePreface
    22  	}
    23  	triggeredNotifications, err := self.getRecentlyFinishedTasksWithStatus(key,
    24  		evergreen.TaskFailed, preface, failureSubject)
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  
    29  	for _, triggered := range triggeredNotifications {
    30  		email, err := self.TemplateNotification(ae, &triggered)
    31  		if err != nil {
    32  			grip.Warningf("template error with task failure notification for '%s': %s",
    33  				triggered.Current.Id, err.Error())
    34  			continue
    35  		}
    36  
    37  		emails = append(emails, email)
    38  	}
    39  
    40  	return emails, nil
    41  }
    42  
    43  func (self *TaskFailureHandler) TemplateNotification(ae *web.App, notification *TriggeredTaskNotification) (Email, error) {
    44  	changeInfo, err := self.GetChangeInfo(notification)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  	return self.templateNotification(ae, notification, changeInfo)
    49  }
    50  
    51  func (self *TaskFailureHandler) GetChangeInfo(
    52  	notification *TriggeredTaskNotification) ([]ChangeInfo, error) {
    53  	return self.constructChangeInfo([]task.Task{*notification.Current}, &notification.Key)
    54  }