forked from WayneJz/teslamate-addr-fix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
103 lines (89 loc) · 2.1 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
102
103
package main
import (
"flag"
"fmt"
"log"
"os"
"strconv"
"time"
)
var (
timeout int
proxy string
host string
port string
user string
db string
password string
interval int
)
const logName = "teslamate-addr-fix.log"
func init() {
flag.StringVar(&proxy, "proxy", "", "http proxy (default use system proxy)")
flag.IntVar(&timeout, "timeout", 5, "timeout of openstreetmap request")
flag.StringVar(&host, "host", "127.0.0.1", "teslamate psql host")
flag.StringVar(&port, "port", "5432", "teslamate psql port")
flag.StringVar(&user, "user", "teslamate", "teslamate psql user")
flag.StringVar(&db, "db", "teslamate", "teslamate psql database")
flag.StringVar(&password, "password", "", "teslamate psql password")
flag.IntVar(&interval, "interval", 0, "interval (minutes) for running in daemon mode")
}
func loadEnvInDocker() {
if os.Getenv("TESLAMATE_ADDR_FIX_ENV") != "docker" {
return
}
getEnvStr("PROXY", &proxy)
getEnvInt("OSM_TIMEOUT", &timeout)
getEnvStr("DATABASE_HOST", &host)
getEnvStr("DATABASE_PORT", &port)
getEnvStr("DATABASE_USER", &user)
getEnvStr("DATABASE_NAME", &db)
getEnvStr("DATABASE_PASS", &password)
getEnvInt("INTERVAL", &interval)
// below only for docker
if interval == 0 {
interval = 5
}
}
func main() {
flag.Parse()
loadEnvInDocker()
if password == "" {
fmt.Println("must specify teslamate database password")
return
}
if err := initPSql(host, port, user, password, db); err != nil {
panic(err)
}
if err := initProxyCli(proxy, timeout); err != nil {
panic(err)
}
log.SetFlags(log.LstdFlags | log.Lshortfile)
f, err := os.Create(logName)
if err == nil {
log.SetOutput(f)
} else {
log.SetOutput(os.Stdout)
}
if interval > 0 {
for range time.Tick(time.Minute * time.Duration(interval)) {
saveBrokenAddr()
fixAddrBroken()
}
} else {
saveBrokenAddr()
fixAddrBroken()
}
}
func getEnvStr(env string, str *string) {
if val := os.Getenv(env); val != "" {
*str = val
}
}
func getEnvInt(env string, num *int) {
if val := os.Getenv(env); val != "" {
if n, err := strconv.Atoi(val); err == nil {
*num = n
}
}
}