setState sets the new folder state, for states other than FolderError.
(newState folderState)
| 104 | |
| 105 | // setState sets the new folder state, for states other than FolderError. |
| 106 | func (s *stateTracker) setState(newState folderState) { |
| 107 | if newState == FolderError { |
| 108 | panic("must use setError") |
| 109 | } |
| 110 | |
| 111 | s.mut.Lock() |
| 112 | defer s.mut.Unlock() |
| 113 | |
| 114 | if newState == s.current { |
| 115 | return |
| 116 | } |
| 117 | |
| 118 | defer func() { |
| 119 | metricFolderState.WithLabelValues(s.folderID).Set(float64(s.current)) |
| 120 | }() |
| 121 | |
| 122 | eventData := map[string]interface{}{ |
| 123 | "folder": s.folderID, |
| 124 | "to": newState.String(), |
| 125 | "from": s.current.String(), |
| 126 | } |
| 127 | |
| 128 | if !s.changed.IsZero() { |
| 129 | eventData["duration"] = time.Since(s.changed).Seconds() |
| 130 | } |
| 131 | |
| 132 | slog.Debug("Folder changed state", "folder", s.folderID, "state", newState, "from", s.current) |
| 133 | |
| 134 | s.current = newState |
| 135 | s.changed = time.Now().Truncate(time.Second) |
| 136 | |
| 137 | s.evLogger.Log(events.StateChanged, eventData) |
| 138 | } |
| 139 | |
| 140 | // getState returns the current state, the time when it last changed, and the |
| 141 | // current error or nil. |
no test coverage detected