-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
verify.go
58 lines (43 loc) · 1.27 KB
/
verify.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package reportverifs
import (
"context"
"time"
"go.opentelemetry.io/otel"
"exusiai.dev/backend-next/internal/model/types"
"exusiai.dev/backend-next/internal/pkg/observability"
)
var tracer = otel.Tracer("reportverifs")
type Verifier interface {
Name() string
Verify(ctx context.Context, report *types.ReportTaskSingleReport, reportTask *types.ReportTask) *Rejection
}
type ReportVerifiers []Verifier
func NewReportVerifier(userVerifier *UserVerifier, dropVerifier *DropVerifier, md5Verifier *MD5Verifier, rejectRuleVerifier *RejectRuleVerifier) *ReportVerifiers {
return &ReportVerifiers{
userVerifier,
md5Verifier,
dropVerifier,
rejectRuleVerifier,
}
}
func (verifiers ReportVerifiers) Verify(ctx context.Context, reportTask *types.ReportTask) (violations Violations) {
violations = map[int]*Violation{}
for reportIndex, report := range reportTask.Reports {
for _, pipe := range verifiers {
start := time.Now()
name := pipe.Name()
rejection := pipe.Verify(ctx, report, reportTask)
observability.ReportVerifyDuration.
WithLabelValues(name).
Observe(time.Since(start).Seconds())
if rejection != nil {
violations[reportIndex] = &Violation{
Name: name,
Rejection: *rejection,
}
break
}
}
}
return violations
}