func handleResponse(mm *state.MetricsManager, st ModelBackend, response wireformat.Response) int { var acknowledgedBatches int for _, envResp := range response.EnvResponses { acknowledgedBatches += len(envResp.AcknowledgedBatches) err := st.SetMetricBatchesSent(envResp.AcknowledgedBatches) if err != nil { logger.Errorf("failed to set sent on metrics %v", err) } for unitName, status := range envResp.UnitStatuses { unit, err := st.Unit(unitName) if err != nil { logger.Errorf("failed to retrieve unit %q: %v", unitName, err) continue } err = unit.SetMeterStatus(status.Status, status.Info) if err != nil { logger.Errorf("failed to set unit %q meter status to %v: %v", unitName, status, err) } } } if response.NewGracePeriod > 0 { err := mm.SetGracePeriod(response.NewGracePeriod) if err != nil { logger.Errorf("failed to set new grace period %v", err) } } return acknowledgedBatches }
func assertMetricsManagerAmberState(c *gc.C, metricsManager *state.MetricsManager) { err := metricsManager.SetLastSuccessfulSend(time.Now()) c.Assert(err, jc.ErrorIsNil) for i := 0; i < 3; i++ { err := metricsManager.IncrementConsecutiveErrors() c.Assert(err, jc.ErrorIsNil) } status := metricsManager.MeterStatus() c.Assert(status.Code, gc.Equals, state.MeterAmber) }
// TODO (mattyw) This function could be moved into a metricsmanager testing package. func assertMetricsManagerRedState(c *gc.C, metricsManager *state.MetricsManager) { // To enter the red state we need to set a last successful send as over 1 week ago err := metricsManager.SetLastSuccessfulSend(time.Now().Add(-8 * 24 * time.Hour)) c.Assert(err, jc.ErrorIsNil) for i := 0; i < 3; i++ { err := metricsManager.IncrementConsecutiveErrors() c.Assert(err, jc.ErrorIsNil) } status := metricsManager.MeterStatus() c.Assert(status.Code, gc.Equals, state.MeterRed) }