This repository has been archived by the owner on Jan 1, 2019. It is now read-only.
/
main.go
92 lines (78 loc) · 1.84 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
package main
import (
"flag"
"fmt"
"log"
"os"
"github.com/spf13/afero"
"github.com/alext/temperature-monitor/sensor"
"github.com/alext/temperature-monitor/webserver"
)
var fs afero.Fs = &afero.OsFs{}
const (
defaultConfigFile = "./config.json"
defaultPort = 8081
)
func main() {
logDest := flag.String("log", "STDERR", "Where to log to - STDOUT, STDERR or a filename")
configFile := flag.String("config-file", defaultConfigFile, "Path to the config file")
returnVersion := flag.Bool("version", false, "return version information and exit")
flag.Parse()
if *returnVersion {
fmt.Printf("temperature-monitor %s\n", versionInfo())
os.Exit(0)
}
err := setupLogging(*logDest)
if err != nil {
log.Fatal(err)
}
config, err := loadConfig(*configFile)
if err != nil {
log.Fatal("Error opening config file : ", err)
}
srv := webserver.New(config.Port)
err = addSensors(config, srv)
if err != nil {
log.Fatal(err)
}
err = srv.Run()
if err != nil {
log.Fatal(err)
}
}
func setupLogging(destination string) error {
switch destination {
case "STDERR":
log.SetOutput(os.Stderr)
case "STDOUT":
log.SetOutput(os.Stdout)
default:
file, err := fs.OpenFile(destination, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0600)
if err != nil {
return fmt.Errorf("Error opening log %s: %s", destination, err.Error())
}
log.SetOutput(file)
}
return nil
}
func addSensors(config *config, srv *webserver.Webserver) error {
for name, sensorConfig := range config.Sensors {
var (
s sensor.Sensor
err error
)
switch sensorConfig.Type {
case "w1":
s, err = sensor.NewW1Sensor(sensorConfig.ID)
if err != nil {
return err
}
case "push":
s = sensor.NewPushSensor(sensorConfig.ID)
default:
return fmt.Errorf("Unrecognised sensor type: '%s'", sensorConfig.Type)
}
srv.AddSensor(name, s)
}
return nil
}