本文整理汇总了Golang中github.com/evergreen-ci/evergreen/model/host.Find函数的典型用法代码示例。如果您正苦于以下问题:Golang Find函数的具体用法?Golang Find怎么用?Golang Find使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Find函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: monitorReachability
// monitorReachability is a hostMonitoringFunc responsible for seeing if
// hosts are reachable or not. returns a slice of any errors that occur
func monitorReachability(settings *evergreen.Settings) []error {
evergreen.Logger.Logf(slogger.INFO, "Running reachability checks...")
// used to store any errors that occur
var errors []error
// fetch all hosts that have not been checked recently
// (> 10 minutes ago)
threshold := time.Now().Add(-ReachabilityCheckInterval)
hosts, err := host.Find(host.ByNotMonitoredSince(threshold))
if err != nil {
errors = append(errors, fmt.Errorf("error finding hosts not"+
" monitored recently: %v", err))
return errors
}
// check all of the hosts. continue on error so that other hosts can be
// checked successfully
for _, host := range hosts {
if err := checkHostReachability(host, settings); err != nil {
errors = append(errors, fmt.Errorf("error checking reachability"+
" for host %v: %v", host.Id, err))
continue
}
}
evergreen.Logger.Logf(slogger.INFO, "Finished running host reachability checks")
return errors
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:35,代码来源:host_monitoring.go
示例2: flagDecommissionedHosts
// flagDecommissionedHosts is a hostFlaggingFunc to get all hosts which should
// be terminated because they are decommissioned
func flagDecommissionedHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
hosts, err := host.Find(host.IsDecommissioned)
if err != nil {
return nil, fmt.Errorf("error finding decommissioned hosts: %v", err)
}
return hosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:9,代码来源:host_flagging.go
示例3: monitorReachability
// monitorReachability is a hostMonitoringFunc responsible for seeing if
// hosts are reachable or not. returns a slice of any errors that occur
func monitorReachability(settings *evergreen.Settings) []error {
evergreen.Logger.Logf(slogger.INFO, "Running reachability checks...")
// used to store any errors that occur
var errors []error
// fetch all hosts that have not been checked recently
// (> 10 minutes ago)
threshold := time.Now().Add(-ReachabilityCheckInterval)
hosts, err := host.Find(host.ByNotMonitoredSince(threshold))
if err != nil {
errors = append(errors, fmt.Errorf("error finding hosts not monitored recently: %v", err))
return errors
}
workers := NumReachabilityWorkers
if len(hosts) < workers {
workers = len(hosts)
}
wg := sync.WaitGroup{}
wg.Add(workers)
hostsChan := make(chan host.Host, workers)
errChan := make(chan error, workers)
for i := 0; i < workers; i++ {
go func() {
defer wg.Done()
for host := range hostsChan {
if err := checkHostReachability(host, settings); err != nil {
errChan <- err
}
}
}()
}
errDone := make(chan struct{})
go func() {
defer close(errDone)
for err := range errChan {
errors = append(errors, fmt.Errorf("error checking reachability: %v", err))
}
}()
// check all of the hosts. continue on error so that other hosts can be
// checked successfully
for _, host := range hosts {
hostsChan <- host
}
close(hostsChan)
wg.Wait()
close(errChan)
<-errDone
return errors
}
开发者ID:tychoish,项目名称:evergreen,代码行数:61,代码来源:host_monitoring.go
示例4: spawnHosts
// Call out to the embedded CloudManager to spawn hosts. Takes in a map of
// distro -> number of hosts to spawn for the distro.
// Returns a map of distro -> hosts spawned, and an error if one occurs.
func (s *Scheduler) spawnHosts(newHostsNeeded map[string]int) (
map[string][]host.Host, error) {
// loop over the distros, spawning up the appropriate number of hosts
// for each distro
hostsSpawnedPerDistro := make(map[string][]host.Host)
for distroId, numHostsToSpawn := range newHostsNeeded {
if numHostsToSpawn == 0 {
continue
}
hostsSpawnedPerDistro[distroId] = make([]host.Host, 0, numHostsToSpawn)
for i := 0; i < numHostsToSpawn; i++ {
d, err := distro.FindOne(distro.ById(distroId))
if err != nil {
evergreen.Logger.Logf(slogger.ERROR, "Failed to find distro '%v': %v", distroId, err)
}
allDistroHosts, err := host.Find(host.ByDistroId(distroId))
if err != nil {
evergreen.Logger.Logf(slogger.ERROR, "Error getting hosts for distro %v: %v", distroId, err)
continue
}
if len(allDistroHosts) >= d.PoolSize {
evergreen.Logger.Logf(slogger.ERROR, "Already at max (%v) hosts for distro '%v'",
distroId,
d.PoolSize)
continue
}
cloudManager, err := providers.GetCloudManager(d.Provider, s.Settings)
if err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error getting cloud manager for distro: %v", err)
continue
}
hostOptions := cloud.HostOptions{
UserName: evergreen.User,
UserHost: false,
}
newHost, err := cloudManager.SpawnInstance(d, hostOptions)
if err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error spawning instance: %v,",
err)
continue
}
hostsSpawnedPerDistro[distroId] =
append(hostsSpawnedPerDistro[distroId], *newHost)
}
// if none were spawned successfully
if len(hostsSpawnedPerDistro[distroId]) == 0 {
delete(hostsSpawnedPerDistro, distroId)
}
}
return hostsSpawnedPerDistro, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:62,代码来源:scheduler.go
示例5: FindAvailableHosts
// FindAvailableHosts finds all hosts available to have a task run on them.
// It fetches hosts from the database whose status is "running" and who have
// no task currently being run on them.
func (self *DBHostFinder) FindAvailableHosts() ([]host.Host, error) {
// find and return any hosts not currently running a task
availableHosts, err := host.Find(host.IsAvailableAndFree)
if err != nil {
return nil, err
}
return availableHosts, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:11,代码来源:host_finder.go
示例6: flagUnreachableHosts
// flagUnreachableHosts is a hostFlaggingFunc to get all hosts which should
// be terminated because they are unreachable
func flagUnreachableHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
threshold := time.Now().Add(-1 * UnreachableCutoff)
hosts, err := host.Find(host.ByUnreachableBefore(threshold))
if err != nil {
return nil, fmt.Errorf("error finding hosts unreachable since before %v: %v", threshold, err)
}
return hosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:10,代码来源:host_flagging.go
示例7: FindAvailableHostsForDistro
// FindAvailableHostsForDistro finds all hosts of a certain distro
// available to have a task run on them.
func (self *DBHostFinder) FindAvailableHostsForDistro(d string) ([]host.Host, error) {
// find and return any hosts not currently running a task
availableHosts, err := host.Find(host.ByAvailableForDistro(d))
if err != nil {
return nil, err
}
return availableHosts, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:10,代码来源:host_finder.go
示例8: TestCreateHostBuckets
func TestCreateHostBuckets(t *testing.T) {
testutil.HandleTestingErr(db.ClearCollections(host.Collection), t, "couldnt reset host")
Convey("With a starting time and a minute bucket size and inserting dynamic hosts with different time frames", t, func() {
now := time.Now()
bucketSize := time.Duration(10) * time.Second
// -20 -> 20
beforeStartHost := host.Host{Id: "beforeStartHost", CreationTime: now.Add(time.Duration(-20) * time.Second), TerminationTime: now.Add(time.Duration(20) * time.Second), Provider: "ec2"}
So(beforeStartHost.Insert(), ShouldBeNil)
// 80 -> 120
afterEndHost := host.Host{Id: "afterEndHost", CreationTime: now.Add(time.Duration(80) * time.Second), TerminationTime: now.Add(time.Duration(120) * time.Second), Provider: "ec2"}
So(afterEndHost.Insert(), ShouldBeNil)
// 20 -> 40
h1 := host.Host{Id: "h1", CreationTime: now.Add(time.Duration(20) * time.Second), TerminationTime: now.Add(time.Duration(40) * time.Second), Provider: "ec2"}
So(h1.Insert(), ShouldBeNil)
// 10 -> 80
h2 := host.Host{Id: "h2", CreationTime: now.Add(time.Duration(10) * time.Second), TerminationTime: now.Add(time.Duration(80) * time.Second), Provider: "ec2"}
So(h2.Insert(), ShouldBeNil)
// 20 ->
h3 := host.Host{Id: "h3", CreationTime: now.Add(time.Duration(20) * time.Second), TerminationTime: util.ZeroTime, Provider: "ec2", Status: evergreen.HostRunning}
So(h3.Insert(), ShouldBeNil)
// 5 -> 7
sameBucket := host.Host{Id: "sameBucket", CreationTime: now.Add(time.Duration(5) * time.Second), TerminationTime: now.Add(time.Duration(7) * time.Second), Provider: "ec2"}
So(sameBucket.Insert(), ShouldBeNil)
// 5 -> 30
h4 := host.Host{Id: "h4", CreationTime: now.Add(time.Duration(5) * time.Second), TerminationTime: now.Add(time.Duration(30) * time.Second), Provider: "ec2"}
So(h4.Insert(), ShouldBeNil)
Convey("for three buckets of 10 seconds, should only retrieve pertinent host docs", func() {
endTime := now.Add(time.Duration(30) * time.Second)
hosts, err := host.Find(host.ByDynamicWithinTime(now, endTime))
So(err, ShouldBeNil)
So(len(hosts), ShouldEqual, 6)
frameBounds := FrameBounds{
StartTime: now,
EndTime: endTime,
BucketSize: bucketSize,
NumberBuckets: 3,
}
Convey("should create the correct buckets and bucket time accordingly", func() {
buckets, errors := CreateHostBuckets(hosts, frameBounds)
So(errors, ShouldBeEmpty)
So(len(buckets), ShouldEqual, 3)
So(int(buckets[0].TotalTime.Seconds()), ShouldEqual, 17)
So(int(buckets[1].TotalTime.Seconds()), ShouldEqual, 30)
So(int(math.Ceil(buckets[2].TotalTime.Seconds())), ShouldEqual, 40)
})
})
})
}
开发者ID:tychoish,项目名称:evergreen,代码行数:58,代码来源:scheduler_stats_test.go
示例9: flagExpiredHosts
// flagExpiredHosts is a hostFlaggingFunc to get all user-spawned hosts
// that have expired
func flagExpiredHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
// fetch the expired hosts
hosts, err := host.Find(host.ByExpiredSince(time.Now()))
if err != nil {
return nil, fmt.Errorf("error finding expired spawned hosts: %v", err)
}
return hosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:11,代码来源:host_flagging.go
示例10: flagUnprovisionedHosts
// flagUnprovisionedHosts is a hostFlaggingFunc to get all hosts that are
// taking too long to provision
func flagUnprovisionedHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
// fetch all hosts that are taking too long to provision
threshold := time.Now().Add(-ProvisioningCutoff)
hosts, err := host.Find(host.ByUnprovisionedSince(threshold))
if err != nil {
return nil, fmt.Errorf("error finding unprovisioned hosts: %v", err)
}
return hosts, err
}
开发者ID:sr527,项目名称:evergreen,代码行数:11,代码来源:host_flagging.go
示例11: flagProvisioningFailedHosts
// flagProvisioningFailedHosts is a hostFlaggingFunc to get all hosts
// whose provisioning failed
func flagProvisioningFailedHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
// fetch all hosts whose provisioning failed
hosts, err := host.Find(host.IsProvisioningFailure)
if err != nil {
return nil, fmt.Errorf("error finding hosts whose provisioning"+
" failed: %v", err)
}
return hosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:12,代码来源:host_flagging.go
示例12: modifyHosts
func (uis *UIServer) modifyHosts(w http.ResponseWriter, r *http.Request) {
_ = MustHaveUser(r)
opts := &uiParams{}
err := util.ReadJSONInto(r.Body, opts)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
hostIds := opts.HostIds
if len(hostIds) == 1 && strings.TrimSpace(hostIds[0]) == "" {
http.Error(w, "No host ID's found in request", http.StatusBadRequest)
return
}
// fetch all relevant hosts
hosts, err := host.Find(host.ByIds(hostIds))
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error finding hosts: %v", err))
return
}
if len(hosts) == 0 {
http.Error(w, "No matching hosts found.", http.StatusBadRequest)
return
}
// determine what action needs to be taken
switch opts.Action {
case "updateStatus":
newStatus := opts.Status
if !util.SliceContains(validUpdateToStatuses, newStatus) {
http.Error(w, fmt.Sprintf("Invalid status: %v", opts.Status), http.StatusBadRequest)
return
}
numHostsUpdated := 0
for _, host := range hosts {
err := host.SetStatus(newStatus)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error updating host %v", err))
return
}
numHostsUpdated += 1
}
msg := NewSuccessFlash(fmt.Sprintf("%v host(s) status successfully updated to '%v'",
numHostsUpdated, newStatus))
PushFlash(uis.CookieStore, r, w, msg)
return
default:
http.Error(w, fmt.Sprintf("Unrecognized action: %v", opts.Action), http.StatusBadRequest)
return
}
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:55,代码来源:host.go
示例13: slowProvisioningWarnings
// slowProvisioningWarnings is a notificationBuilder to build any necessary
// warnings about hosts that are taking a long time to provision
func slowProvisioningWarnings(settings *evergreen.Settings) ([]notification,
error) {
evergreen.Logger.Logf(slogger.INFO, "Building warnings for hosts taking a long"+
" time to provision...")
if settings.Notify.SMTP == nil {
return []notification{}, fmt.Errorf("no notification emails configured")
}
// fetch all hosts that are taking too long to provision
threshold := time.Now().Add(-slowProvisioningThreshold)
hosts, err := host.Find(host.ByUnprovisionedSince(threshold))
if err != nil {
return nil, fmt.Errorf("error finding unprovisioned hosts: %v", err)
}
// the list of warning notifications that will be returned
warnings := []notification{}
for _, h := range hosts {
// if a warning has been sent for the host, skip it
if h.Notifications[slowProvisioningWarning] {
continue
}
evergreen.Logger.Logf(slogger.INFO, "Slow-provisioning warning needs to"+
" be sent for host %v", h.Id)
// build the notification
hostNotification := notification{
recipient: settings.Notify.SMTP.AdminEmail[0],
subject: fmt.Sprintf("Host %v taking a long time to provision",
h.Id),
message: fmt.Sprintf("See %v/ui/host/%v",
settings.Ui.Url, h.Id),
threshold: slowProvisioningWarning,
host: h,
callback: func(h host.Host, s string) error {
return h.SetExpirationNotification(s)
},
}
// add it to the final list
warnings = append(warnings, hostNotification)
}
evergreen.Logger.Logf(slogger.INFO, "Built %v warnings about hosts taking a"+
" long time to provision", len(warnings))
return warnings, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:56,代码来源:notification.go
示例14: CreateAllHostUtilizationBuckets
// CreateAllHostUtilizationBuckets aggregates each bucket by creating a time frame given the number of days back
// and the granularity wanted (ie. days, minutes, seconds, hours) all in seconds. It returns a list of Host utilization
// information for each bucket.
func CreateAllHostUtilizationBuckets(daysBack, granularity int) ([]HostUtilizationBucket, error) {
bounds := CalculateBounds(daysBack, granularity)
// find non-static hosts
dynamicHosts, err := host.Find(host.ByDynamicWithinTime(bounds.StartTime, bounds.EndTime))
if err != nil {
return nil, err
}
// find static hosts
staticHosts, err := host.Find(host.AllStatic)
if err != nil {
return nil, err
}
dynamicBuckets, _ := CreateHostBuckets(dynamicHosts, bounds)
staticBuckets, _ := CreateHostBuckets(staticHosts, bounds)
tasks, err := task.Find(task.ByTimeRun(bounds.StartTime, bounds.EndTime).WithFields(task.StartTimeKey, task.FinishTimeKey, task.HostIdKey))
if err != nil {
return nil, err
}
oldTasks, err := task.FindOld(task.ByTimeRun(bounds.StartTime, bounds.EndTime))
if err != nil {
return nil, err
}
taskBuckets, _ := CreateTaskBuckets(tasks, oldTasks, bounds)
bucketData := []HostUtilizationBucket{}
for i, staticBucket := range staticBuckets {
b := HostUtilizationBucket{
StaticHost: staticBucket.TotalTime,
DynamicHost: dynamicBuckets[i].TotalTime,
Task: taskBuckets[i].TotalTime,
StartTime: bounds.StartTime.Add(time.Duration(i) * bounds.BucketSize),
EndTime: bounds.StartTime.Add(time.Duration(i+1) * bounds.BucketSize),
}
bucketData = append(bucketData, b)
}
return bucketData, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:44,代码来源:scheduler_stats.go
示例15: getSpawnedHosts
func (uis *UIServer) getSpawnedHosts(w http.ResponseWriter, r *http.Request) {
user := MustHaveUser(r)
hosts, err := host.Find(host.ByUserWithRunningStatus(user.Username()))
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError,
fmt.Errorf("Error finding running hosts for user %v: %v", user.Username(), err))
return
}
uis.WriteJSON(w, http.StatusOK, hosts)
}
开发者ID:amidvidy,项目名称:evergreen,代码行数:12,代码来源:spawn.go
示例16: hostsInfoForUser
// returns info on all of the hosts spawned by a user
func (as *APIServer) hostsInfoForUser(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
user := vars["user"]
hosts, err := host.Find(host.ByUserWithUnterminatedStatus(user))
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
as.WriteJSON(w, http.StatusOK, spawnResponse{Hosts: hosts})
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:13,代码来源:spawn_api.go
示例17: flagExcessHosts
// flagExcessHosts is a hostFlaggingFunc to get all hosts that push their
// distros over the specified max hosts
func flagExcessHosts(distros []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
// will ultimately contain all the hosts that can be terminated
excessHosts := []host.Host{}
// figure out the excess hosts for each distro
for _, d := range distros {
// fetch any hosts for the distro that count towards max hosts
allHostsForDistro, err := host.Find(host.ByDistroId(d.Id))
if err != nil {
return nil, fmt.Errorf("error fetching hosts for distro %v: %v", d.Id, err)
}
// if there are more than the specified max hosts, then terminate
// some, if they are not running tasks
numExcessHosts := len(allHostsForDistro) - d.PoolSize
if numExcessHosts > 0 {
// track how many hosts for the distro are terminated
counter := 0
for _, host := range allHostsForDistro {
// if the host is not dynamically spun up (and can
// thus be terminated), skip it
canTerminate, err := hostCanBeTerminated(host, s)
if err != nil {
return nil, fmt.Errorf("error checking if host %v can be terminated: %v", host.Id, err)
}
if !canTerminate {
continue
}
// if the host is not running a task, it can be
// safely terminated
if host.RunningTask == "" {
excessHosts = append(excessHosts, host)
counter++
}
// break if we've marked enough to be terminated
if counter == numExcessHosts {
break
}
}
evergreen.Logger.Logf(slogger.INFO, "Found %v excess hosts for distro %v", counter, d.Id)
}
}
return excessHosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:55,代码来源:host_flagging.go
示例18: getHostsData
func getHostsData(includeSpawnedHosts bool) (*hostsData, error) {
data := &hostsData{}
// get all of the hosts
var dbHosts []host.Host
var err error
if includeSpawnedHosts {
dbHosts, err = host.Find(host.IsRunning)
} else {
dbHosts, err = host.Find(host.ByUserWithRunningStatus(evergreen.User))
}
if err != nil {
return nil, err
}
// convert the hosts to the ui models
uiHosts := make([]uiHost, len(dbHosts))
for idx, dbHost := range dbHosts {
// we only need the distro id for the hosts page
dbHost.Distro = distro.Distro{Id: dbHost.Distro.Id}
host := uiHost{
Host: dbHost,
RunningTask: nil,
}
uiHosts[idx] = host
// get the task running on this host
task, err := model.FindTask(dbHost.RunningTask)
if err != nil {
return nil, err
}
if task != nil {
uiHosts[idx].RunningTask = task
}
}
data.Hosts = uiHosts
return data, nil
}
开发者ID:markbenvenuto,项目名称:evergreen,代码行数:39,代码来源:models.go
示例19: flagIdleHosts
// flagIdleHosts is a hostFlaggingFunc to get all hosts which have spent too
// long without running a task
func flagIdleHosts(d []distro.Distro, s *evergreen.Settings) ([]host.Host, error) {
// will ultimately contain all of the hosts determined to be idle
idleHosts := []host.Host{}
// fetch all hosts not currently running a task
freeHosts, err := host.Find(host.IsFree)
if err != nil {
return nil, fmt.Errorf("error finding free hosts: %v", err)
}
// go through the hosts, and see if they have idled long enough to
// be terminated
for _, host := range freeHosts {
// ask the host how long it has been idle
idleTime := host.IdleTime()
// get a cloud manager for the host
cloudManager, err := providers.GetCloudManager(host.Provider, s)
if err != nil {
return nil, fmt.Errorf("error getting cloud manager for host %v: %v", host.Id, err)
}
// if the host is not dynamically spun up (and can thus be terminated),
// skip it
canTerminate, err := hostCanBeTerminated(host, s)
if err != nil {
return nil, fmt.Errorf("error checking if host %v can be terminated: %v", host.Id, err)
}
if !canTerminate {
continue
}
// ask how long until the next payment for the host
tilNextPayment := cloudManager.TimeTilNextPayment(&host)
// current determinants for idle:
// idle for at least 15 minutes and
// less than 5 minutes til next payment
if idleTime >= 15*time.Minute && tilNextPayment <= 5*time.Minute {
idleHosts = append(idleHosts, host)
}
}
return idleHosts, nil
}
开发者ID:sr527,项目名称:evergreen,代码行数:48,代码来源:host_flagging.go
示例20: spawnHostExpirationWarnings
// spawnHostExpirationWarnings is a notificationBuilder to build any necessary
// warnings about hosts that will be expiring soon (but haven't expired yet)
func spawnHostExpirationWarnings(settings *evergreen.Settings) ([]notification,
error) {
evergreen.Logger.Logf(slogger.INFO, "Building spawned host expiration"+
" warnings...")
// sanity check, since the thresholds are supplied in code
if len(spawnWarningThresholds) == 0 {
evergreen.Logger.Logf(slogger.WARN, "there are no currently set warning"+
" thresholds for spawned hosts - users will not receive emails"+
" warning them of imminent host expiration")
return nil, nil
}
// assumed to be the first warning threshold (the least recent one)
firstWarningThreshold :=
spawnWarningThresholds[len(spawnWarningThresholds)-1]
// find all spawned hosts that have passed at least one warning threshold
now := time.Now()
thresholdTime := now.Add(firstWarningThreshold)
hosts, err := host.Find(host.ByExpiringBetween(now, thresholdTime))
if err != nil {
return nil, fmt.Errorf("error finding spawned hosts that will be"+
" expiring soon: %v", err)
}
// the eventual list of warning notifications to be sent
warnings := []notification{}
for _, h := range hosts {
// figure out the most recent expiration notification threshold the host
// has crossed
threshold := lastWarningThresholdCrossed(&h)
// for keying into the host's notifications map
thresholdKey := strconv.Itoa(int(threshold.Minutes()))
// if a notification has already been sent for the threshold for this
// host, skip it
if h.Notifications[thresholdKey] {
continue
}
evergreen.Logger.Logf(slogger.INFO, "Warning needs to be sent for threshold"+
" '%v' for host %v", thresholdKey, h.Id)
// we need to send a notification for the threshold for this host
hostNotification := notification{
recipient: h.StartedBy,
subject: fmt.Sprintf("%v host termination reminder", h.Distro.Id),
message: fmt.Sprintf("Your %v host with id %v will be terminated"+
" at %v, in %v minutes. Visit %v to extend its lifetime.",
h.Distro.Id, h.Id,
h.ExpirationTime.Format(time.RFC850),
h.ExpirationTime.Sub(time.Now()),
settings.Ui.Url+"/ui/spawn"),
threshold: thresholdKey,
host: h,
callback: func(h host.Host, thresholdKey string) error {
return h.SetExpirationNotification(thresholdKey)
},
}
// add it to the list
warnings = append(warnings, hostNotification)
}
evergreen.Logger.Logf(slogger.INFO, "Built %v warnings about imminently"+
" expiring hosts", len(warnings))
return warnings, nil
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:77,代码来源:notification.go
注:本文中的github.com/evergreen-ci/evergreen/model/host.Find函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论