• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

brotherlogic / recordprocess / 19843112103

02 Dec 2025 01:08AM UTC coverage: 46.596%. First build
19843112103

Pull #2210

github

brotherlogic
Fixed merge
Pull Request #2210: Slow down fast push

3 of 4 new or added lines in 1 file covered. (75.0%)

219 of 470 relevant lines covered (46.6%)

0.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.72
/recordprocessutils.go
1
package main
2

3
import (
4
        "fmt"
5
        "time"
6

7
        "golang.org/x/net/context"
8

9
        pbgd "github.com/brotherlogic/godiscogs/proto"
10
        pbrc "github.com/brotherlogic/recordcollection/proto"
11
        "github.com/prometheus/client_golang/prometheus"
12
        "github.com/prometheus/client_golang/prometheus/promauto"
13
)
14

15
type getter interface {
16
        getRecords(ctx context.Context, t int64, c int) ([]int32, error)
17
        getRecord(ctx context.Context, instanceID int32) (*pbrc.Record, error)
18
        update(ctx context.Context, instanceID int32, category pbrc.ReleaseMetadata_Category, reason string, scount int32) error
19
}
20

21
func (s *Server) runLoop(ctx context.Context) {
×
22

×
23
        config, err := s.readConfig(ctx)
×
24
        if err != nil {
×
25
                s.CtxLog(ctx, fmt.Sprintf("Unable to process: %v", err))
×
26
                return
×
27
        }
×
28

29
        bt := time.Now().Unix()
×
30
        bid := int32(-1)
×
31
        for id, t := range config.GetNextUpdateTime() {
×
32
                if t < bt {
×
33
                        bt = t
×
34
                        bid = id
×
35
                }
×
36

37
        }
38

39
        if bid > 0 {
×
40
                _, err := s.ClientUpdate(ctx, &pbrc.ClientUpdateRequest{InstanceId: bid})
×
41
                s.CtxLog(ctx, fmt.Sprintf("Updated %v -> %v", bid, err))
×
42
        }
×
43
}
44

45
func (s *Server) isJustCd(ctx context.Context, record *pbrc.Record) bool {
1✔
46
        if len(record.GetRelease().GetFormats()) == 0 {
1✔
47
                return false
×
48
        }
×
49

50
        for _, format := range record.GetRelease().GetFormats() {
2✔
51
                if format.GetName() != "CD" && format.GetName() != "CDr" {
2✔
52
                        return false
1✔
53
                }
1✔
54
        }
55

56
        return true
1✔
57
}
58

59
func (s *Server) saveRecordScore(ctx context.Context, record *pbrc.Record) bool {
1✔
60
        found := false
1✔
61
        /*for _, score := range s.scores.GetScores() {
1✔
62
                if score.GetCategory() == record.GetMetadata().GetCategory() && score.GetInstanceId() == record.GetRelease().InstanceId {
1✔
63
                        found = true
1✔
64
                        break
1✔
65
                }
1✔
66
        }
1✔
67

1✔
68
        if !found && record.GetRelease().Rating > 0 && !strings.HasPrefix(record.GetMetadata().GetCategory().String(), "PRE") {
1✔
69
                s.scores.Scores = append(s.scores.Scores, &pb.RecordScore{
1✔
70
                        InstanceId: record.GetRelease().InstanceId,
1✔
71
                        Rating:     record.GetRelease().Rating,
1✔
72
                        Category:   record.GetMetadata().GetCategory(),
1✔
73
                        ScoreTime:  time.Now().Unix(),
1✔
74
                })
1✔
75
        }*/
1✔
76

1✔
77
        return !found
1✔
78
}
1✔
79

80
var (
81
        backlog = promauto.NewGauge(prometheus.GaugeOpts{
82
                Name: "recordprocess_backlog",
83
                Help: "The size of the print queue",
84
        })
85
)
86

87
func recordNeedsRip(r *pbrc.Record) bool {
1✔
88
        hasCD := false
1✔
89
        // Needs a rip if it has a CD in the formats
1✔
90
        for _, format := range r.GetRelease().Formats {
2✔
91
                if format.Name == "CD" {
2✔
92
                        hasCD = true
1✔
93
                }
1✔
94
        }
95

96
        return hasCD && r.GetMetadata().CdPath == ""
1✔
97
}
98

99
var (
100
        NO_CHANGE = time.Unix(0, 0)
101
)
102

103
func (s *Server) processRecord(ctx context.Context, r *pbrc.Record) (pbrc.ReleaseMetadata_Category, time.Time, string) {
1✔
104
        // Don't process a record that has a pending score
1✔
105
        if r.GetMetadata() != nil && (r.GetMetadata().SetRating != 0 || r.GetMetadata().Dirty) {
2✔
106
                return pbrc.ReleaseMetadata_UNKNOWN, NO_CHANGE, "Pending Score"
1✔
107
        }
1✔
108

109
        // Don't process a record that is in the box
110
        if r.GetMetadata() != nil &&
1✔
111
                r.GetMetadata().GetBoxState() != pbrc.ReleaseMetadata_BOX_UNKNOWN &&
1✔
112
                r.GetMetadata().GetBoxState() != pbrc.ReleaseMetadata_OUT_OF_BOX {
1✔
113
                return pbrc.ReleaseMetadata_UNKNOWN, NO_CHANGE, "In The Box"
×
114
        }
×
115

116
        if r.GetMetadata().GetGoalFolder() == 268147 && r.GetMetadata().Category != pbrc.ReleaseMetadata_DIGITAL {
2✔
117
                return pbrc.ReleaseMetadata_DIGITAL, NO_CHANGE, "Digital"
1✔
118
        }
1✔
119

120
        // Deal with parents records
121
        if r.GetRelease().FolderId == 1727264 && r.GetMetadata().Category == pbrc.ReleaseMetadata_PARENTS && r.GetMetadata().GoalFolder != 1727264 {
2✔
122
                return pbrc.ReleaseMetadata_PRE_FRESHMAN, NO_CHANGE, "OutOfParents"
1✔
123
        }
1✔
124

125
        if r.GetRelease().FolderId == 1727264 && r.GetMetadata().Category != pbrc.ReleaseMetadata_PARENTS && (r.GetMetadata().GoalFolder == 1727264 || r.GetMetadata().GoalFolder == 0) {
2✔
126
                return pbrc.ReleaseMetadata_PARENTS, NO_CHANGE, "Parents"
1✔
127
        }
1✔
128

129
        // If the record is in google play, set the category to GOOGLE_PLAY
130
        if (r.GetRelease().GetFolderId() == 1433217 || r.GetMetadata().GetGoalFolder() == 1433217) && r.GetMetadata().GetCategory() != pbrc.ReleaseMetadata_GOOGLE_PLAY {
2✔
131
                return pbrc.ReleaseMetadata_GOOGLE_PLAY, NO_CHANGE, "Google Play"
1✔
132
        }
1✔
133

134
        if (r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_UNKNOWN || r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PURCHASED) && r.GetMetadata().GetDateArrived() > 0 {
2✔
135
                return pbrc.ReleaseMetadata_ARRIVED, NO_CHANGE, "Purchased"
1✔
136
        }
1✔
137

138
        if (r.GetMetadata().Category == pbrc.ReleaseMetadata_LISTED_TO_SELL ||
1✔
139
                r.GetMetadata().Category == pbrc.ReleaseMetadata_SOLD_OFFLINE ||
1✔
140
                r.GetMetadata().Category == pbrc.ReleaseMetadata_STALE_SALE) && (r.GetMetadata().SaleState == pbgd.SaleState_SOLD || r.GetMetadata().GetSoldDate() > 0) {
2✔
141
                return pbrc.ReleaseMetadata_SOLD_ARCHIVE, NO_CHANGE, "Actually Sold"
1✔
142
        }
1✔
143

144
        s.CtxLog(ctx, fmt.Sprintf("HERE %v: %v, %v with time %v", r.GetRelease().GetInstanceId(), r.GetMetadata().GetCategory(), r.GetMetadata().GetSaleId(), time.Since(time.Unix(r.GetMetadata().GetLastUpdateTime(), 0))))
1✔
145
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_SOLD && (r.GetMetadata().SaleId > 0 || r.GetMetadata().GetSoldDate() > 0) {
2✔
146
                return pbrc.ReleaseMetadata_LISTED_TO_SELL, NO_CHANGE, "Listed to Sell"
1✔
147
        }
1✔
148

149
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_SOLD && time.Since(time.Unix(r.GetMetadata().GetLastUpdateTime(), 0)) > time.Hour {
1✔
150
                return pbrc.ReleaseMetadata_STAGED_TO_SELL, NO_CHANGE, "Reattempting Sale"
×
151
        }
×
152

153
        s.CtxLog(ctx, fmt.Sprintf("NOW %v %v", r.GetMetadata().GetCategory(), r.GetMetadata().GetSaleId()))
1✔
154
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_LISTED_TO_SELL && r.GetMetadata().GetSaleId() == 2 {
2✔
155
                return pbrc.ReleaseMetadata_SALE_ISSUE, NO_CHANGE, "Sale issue - no id"
1✔
156
        }
1✔
157

158
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_LISTED_TO_SELL && r.GetMetadata().GetSaleId() > 10 && r.GetMetadata().GetSaleState() == pbgd.SaleState_NOT_FOR_SALE {
1✔
159
                return pbrc.ReleaseMetadata_SALE_ISSUE, NO_CHANGE, "Sale issue - not actually for sale"
×
160
        }
×
161

162
        if r.GetMetadata().SaleId < 0 && r.GetMetadata().Category == pbrc.ReleaseMetadata_LISTED_TO_SELL {
2✔
163
                return pbrc.ReleaseMetadata_UNLISTENED, NO_CHANGE, "Marking unlistened"
1✔
164
        }
1✔
165

166
        if r.GetMetadata().SaleId > 5 && (r.GetMetadata().Category != pbrc.ReleaseMetadata_SOLD &&
1✔
167
                r.GetMetadata().Category != pbrc.ReleaseMetadata_SOLD_ARCHIVE &&
1✔
168
                r.GetMetadata().Category != pbrc.ReleaseMetadata_SOLD_OFFLINE &&
1✔
169
                r.GetMetadata().Category != pbrc.ReleaseMetadata_STALE_SALE &&
1✔
170
                r.GetMetadata().Category != pbrc.ReleaseMetadata_LISTED_TO_SELL &&
1✔
171
                r.GetMetadata().Category != pbrc.ReleaseMetadata_RIP_THEN_SELL &&
1✔
172
                r.GetMetadata().Category != pbrc.ReleaseMetadata_STAGED_TO_SELL &&
1✔
173
                r.GetMetadata().Category != pbrc.ReleaseMetadata_ASSESS_FOR_SALE &&
1✔
174
                r.GetMetadata().Category != pbrc.ReleaseMetadata_PREPARE_TO_SELL) {
2✔
175
                return pbrc.ReleaseMetadata_LISTED_TO_SELL, NO_CHANGE, "Listed to Sell"
1✔
176
        }
1✔
177

178
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_RIP_THEN_SELL && !recordNeedsRip(r) {
2✔
179
                return pbrc.ReleaseMetadata_PREPARE_TO_SELL, NO_CHANGE, "Preping for sale"
1✔
180
        }
1✔
181

182
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_ASSESS_FOR_SALE {
2✔
183
                return pbrc.ReleaseMetadata_PREPARE_TO_SELL, NO_CHANGE, "ASSESSED_PREP_FOR_SALE"
1✔
184
        }
1✔
185

186
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_PREPARE_TO_SELL {
2✔
187

1✔
188
                if recordNeedsRip(r) {
2✔
189
                        return pbrc.ReleaseMetadata_RIP_THEN_SELL, NO_CHANGE, "Ripping then selling"
1✔
190
                }
1✔
191

192
                if r.GetRelease().Rating <= 0 {
2✔
193
                        return pbrc.ReleaseMetadata_STAGED_TO_SELL, NO_CHANGE, "Staging to Sell"
1✔
194
                }
1✔
195
        }
196

197
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_DIGITAL && r.GetMetadata().GoalFolder != 268147 && r.GetMetadata().GoalFolder != 0 {
2✔
198
                return pbrc.ReleaseMetadata_ASSESS, NO_CHANGE, "Assessing"
1✔
199
        }
1✔
200

201
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_STAGED_TO_SELL && r.GetRelease().Rating > 0 {
2✔
202
                if r.GetRelease().Rating <= 3 {
2✔
203
                        return pbrc.ReleaseMetadata_SOLD, NO_CHANGE, "Sold"
1✔
204
                }
1✔
205

206
                if r.GetRelease().Rating == 5 {
2✔
207
                        return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "Returning to fold"
1✔
208
                }
1✔
209
        }
210

211
        if r.GetMetadata().GetGoalFolder() == 3903712 && r.GetRelease().GetRating() > 0 && r.GetMetadata().GetCategory() != pbrc.ReleaseMetadata_IN_COLLECTION {
1✔
212
                return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "NatalieToIn"
×
213
        }
×
214

215
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_SOPHMORE ||
1✔
216
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_GRADUATE ||
1✔
217
                r.GetMetadata().Category == pbrc.ReleaseMetadata_FRESHMAN ||
1✔
218
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_POSTDOC ||
1✔
219
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PROFESSOR ||
1✔
220
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_DISTINGUISHED {
2✔
221
                return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "MoveToIn"
1✔
222
        }
1✔
223

224
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_PRE_SOPHMORE ||
1✔
225
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_GRADUATE ||
1✔
226
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_POSTDOC ||
1✔
227
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_PROFESSOR ||
1✔
228
                r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_DISTINGUISHED {
2✔
229
                return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "PRE TO IN"
1✔
230
        }
1✔
231

232
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_PRE_IN_COLLECTION && r.GetRelease().Rating > 0 {
2✔
233
                return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "PlaceInCollection"
1✔
234
        }
1✔
235

236
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_PRE_VALIDATE && r.GetRelease().Rating > 0 {
2✔
237
                return pbrc.ReleaseMetadata_VALIDATE, NO_CHANGE, "Validated"
1✔
238
        }
1✔
239

240
        if r.GetMetadata().Category == pbrc.ReleaseMetadata_PURCHASED && r.GetMetadata().Cost > 0 {
2✔
241
                return pbrc.ReleaseMetadata_UNLISTENED, NO_CHANGE, "New Record"
1✔
242
        }
1✔
243

244
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_UNLISTENED {
2✔
245
                if r.GetRelease().Rating > 0 {
2✔
246
                        return pbrc.ReleaseMetadata_STAGED, time.Unix(r.GetMetadata().GetLastListenTime(), 0).Add(time.Hour * 24 * 30), "Staged"
1✔
247
                }
1✔
248
        }
249

250
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_FRESHMAN && r.GetMetadata().GetDateAdded() > time.Now().AddDate(0, -3, 0).Unix() {
2✔
251
                return pbrc.ReleaseMetadata_UNLISTENED, NO_CHANGE, "PRE_FRESHMAN wrong"
1✔
252
        }
1✔
253

254
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_FRESHMAN && r.GetRelease().Rating > 0 {
2✔
255
                if r.GetMetadata().GetDateAdded() > (time.Now().AddDate(0, -6, 0).Unix()) && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(0, -3, 0).Unix()) {
2✔
256
                        return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "FRESHMAN"
1✔
257
                }
1✔
258
        }
259

260
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PRE_HIGH_SCHOOL && r.GetRelease().Rating > 0 {
2✔
261
                return pbrc.ReleaseMetadata_HIGH_SCHOOL, time.Unix(r.GetMetadata().GetLastListenTime(), 0).Add(time.Hour * 24 * 28), "HIGH SCHOOL W/ARR"
1✔
262
        }
1✔
263

264
        if (r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_VALIDATE || r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_SOFT_VALIDATED) && r.GetRelease().Rating > 0 {
1✔
265
                return pbrc.ReleaseMetadata_IN_COLLECTION, NO_CHANGE, "VALID_TO_IN_COLLECTION"
×
266
        }
×
267

268
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_STAGED && time.Since(time.Unix(r.GetMetadata().GetLastListenTime(), 0)) > time.Hour*24*30 {
2✔
269
                if r.GetMetadata().GetFiledUnder() == pbrc.ReleaseMetadata_FILE_CD && r.GetMetadata().GetWasParents() {
1✔
270
                        return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "FAST PIC"
×
271
                }
×
272
                return pbrc.ReleaseMetadata_PRE_HIGH_SCHOOL, NO_CHANGE, "PRE HS"
1✔
273
        }
274

275
        s.CtxLog(ctx, fmt.Sprintf("%v %v -> %v and %v", r.Metadata.GetCategory(), r.GetRelease().GetInstanceId(), time.Unix(r.GetMetadata().GetDateAdded(), 0), time.Unix(r.GetMetadata().GetLastListenTime(), 0)))
1✔
276
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_HIGH_SCHOOL {
2✔
277
                if r.GetMetadata().GetFiledUnder() == pbrc.ReleaseMetadata_FILE_12_INCH && time.Now().Month() == time.December && time.Since(time.Unix(r.GetMetadata().GetLastListenTime(), 0)) > time.Hour*24 {
1✔
NEW
278
                        return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "PRE IN"
×
279
                } else if time.Since(time.Unix(r.GetMetadata().GetLastListenTime(), 0)) > time.Hour*24*28 {
2✔
280
                        return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "PRE IN"
1✔
281
                }
1✔
282
        }
283

284
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_FRESHMAN && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(0, -6, 0).Unix()) {
1✔
285
                return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "PRE S"
×
286
        }
×
287

288
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_SOPHMORE && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(-1, 0, 0).Unix()) {
1✔
289
                return pbrc.ReleaseMetadata_PRE_IN_COLLECTION, NO_CHANGE, "PRE G"
×
290
        }
×
291

292
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_GRADUATE && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(-2, 0, 0).Unix()) {
1✔
293
                return pbrc.ReleaseMetadata_PRE_POSTDOC, NO_CHANGE, "PRE P"
×
294
        }
×
295

296
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_POSTDOC && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(-3, 0, 0).Unix()) {
1✔
297
                return pbrc.ReleaseMetadata_PRE_PROFESSOR, NO_CHANGE, "PRE PREOG"
×
298
        }
×
299

300
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_PROFESSOR && r.GetMetadata().GetDateAdded() < (time.Now().AddDate(-4, 0, 0).Unix()) {
1✔
301
                return pbrc.ReleaseMetadata_PRE_DISTINGUISHED, NO_CHANGE, "PRE DISTIN"
×
302
        }
×
303

304
        if r.GetMetadata().GetCategory() == pbrc.ReleaseMetadata_ASSESS {
2✔
305
                return pbrc.ReleaseMetadata_PRE_FRESHMAN, NO_CHANGE, "ASSESSED"
1✔
306
        }
1✔
307

308
        return pbrc.ReleaseMetadata_UNKNOWN, NO_CHANGE, "No rules applied"
1✔
309
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc