This repository has been archived by the owner on Apr 11, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
job.go
74 lines (62 loc) · 1.57 KB
/
job.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package cron
import (
"context"
"fmt"
"github.com/getsentry/sentry-go"
"periph.io/x/conn/v3/gpio"
"github.com/gaiaz-iusipov/rpi-violet/internal/config"
)
type job struct {
sentryHub *sentry.Hub
cfg *config.CronJob
pin gpio.PinIO
photoProvider PhotoProvider
photoSender PhotoSender
measurementsProvider MeasurementsProvider
}
func newJob(
cfg *config.CronJob,
pin gpio.PinIO,
photoProvider PhotoProvider,
photoSender PhotoSender,
measurementsProvider MeasurementsProvider,
) *job {
sentryHub := sentry.CurrentHub().Clone()
sentryHub.ConfigureScope(func(scope *sentry.Scope) {
scope.SetTag("cronJobSpec", cfg.Spec)
})
return &job{
sentryHub: sentryHub,
cfg: cfg,
pin: pin,
photoProvider: photoProvider,
photoSender: photoSender,
measurementsProvider: measurementsProvider,
}
}
func (j *job) Run() {
if err := j.runE(); err != nil {
j.sentryHub.CaptureException(err)
}
}
func (j *job) runE() error {
if j.cfg.WithLightSwitch {
pinLvl := gpio.Level(j.cfg.LightState)
if err := j.pin.Out(pinLvl); err != nil {
return fmt.Errorf("pin.Out: %w", err)
}
}
if j.cfg.WithPhoto {
ctx := context.Background()
photo, err := j.photoProvider.GetPhoto(ctx)
if err != nil {
return fmt.Errorf("failed to get photo: %w", err)
}
caption, _ := j.measurementsProvider.Measurements()
err = j.photoSender.SendPhoto(ctx, photo, caption)
if err != nil {
return fmt.Errorf("failed to send photo: %w", err)
}
}
return nil
}