// updateTaskCost determines a task's cost based on the host it ran on. Hosts that // are unable to calculate their own costs will not set a task's Cost field. Errors // are logged but not returned, since any number of API failures could happen and // we shouldn't sacrifice a task's status for them. func (as *APIServer) updateTaskCost(t *task.Task, h *host.Host, finishTime time.Time) { manager, err := providers.GetCloudManager(h.Provider, &as.Settings) if err != nil { evergreen.Logger.Logf(slogger.ERROR, "Error loading provider for host %v cost calculation: %v ", t.HostId, err) return } if calc, ok := manager.(cloud.CloudCostCalculator); ok { evergreen.Logger.Logf(slogger.INFO, "Calculating cost for task %v", t.Id) cost, err := calc.CostForDuration(h, t.StartTime, finishTime) if err != nil { evergreen.Logger.Logf(slogger.ERROR, "Error calculating cost for task %v: %v ", t.Id, err) return } if err := t.SetCost(cost); err != nil { evergreen.Logger.Logf(slogger.ERROR, "Error updating cost for task %v: %v ", t.Id, err) return } } }