-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.go
101 lines (87 loc) · 2.65 KB
/
main.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"alpr/dckr"
"alpr/eb"
"alpr/models"
"alpr/reps"
"alpr/utils"
"encoding/json"
"github.com/docker/docker/client"
"github.com/go-redis/redis/v8"
"log"
"path"
)
func removeContainers(dm *dckr.AlprDockerManager, all bool) {
_, err := dm.RemoveContainers(all)
if err != nil {
log.Println("an error occurred while removing a container, err: ", err.Error())
return
}
}
func test(acs *dckr.AlprContainerScheduler, counter *utils.Counter) error {
resp, _ := acs.Detect(counter, path.Join("temp.jpg"))
jo, err := json.Marshal(resp)
print(jo)
return err
}
func setUpService(client *redis.Client, config *models.Config) {
serviceName := "automatic_license_plate_recognition"
var heartbeatRepository = reps.HeartbeatRepository{Client: client, TimeSecond: int64(config.General.HeartbeatInterval), ServiceName: serviceName}
go heartbeatRepository.Start()
serviceRepository := reps.ServiceRepository{Client: client}
go func() {
_, err := serviceRepository.Add(serviceName)
if err != nil {
log.Println("An error occurred while registering process id, error is:" + err.Error())
}
}()
}
func main() {
defer utils.HandlePanic()
utils.RemovePrevTempImageFiles()
clnt, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
log.Println("docker client couldn't be created, err: " + err.Error())
return
} else {
log.Println("docker client created successfully")
}
dm := &dckr.AlprDockerManager{Client: clnt}
defer func() {
err := clnt.Close()
if err != nil {
log.Println("an error occurred during the closing docker client, err: ", err.Error())
return
}
removeContainers(dm, true)
utils.RemovePrevTempImageFiles()
}()
removeContainers(dm, true)
err = dm.InitImage()
if err != nil {
log.Println("an error occurred during the initializing docker image, err: ", err.Error())
return
}
rb := reps.RepoBucket{}
rb.Init()
var counter utils.Counter = 0
redisClient := rb.GetMainConnection()
var configRep = reps.ConfigRepository{Connection: redisClient}
config, _ := configRep.GetConfig()
acs := dckr.AlprContainerScheduler{Mngr: dm, Config: config}
acs.InitContainers()
err = test(&acs, &counter)
if err != nil {
log.Println("testing is not ok, exiting now...")
return
} else {
log.Println("testing was successful")
}
setUpService(redisClient, config)
event := eb.EventBus{Rb: &rb, Channel: "read_service"}
eventHandler := &eb.FFmpegReaderResponseEvent{Scheduler: acs, Counter: &counter, Rb: &rb}
err = event.Subscribe(eventHandler)
if err != nil {
log.Println("an error occurred while listening read service event, the process is now exiting err: ", err.Error())
}
}