-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
144 lines (130 loc) · 3.74 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
var version = "development"
func readEnvironmentVariable(envVarName string) (string, error) {
value, exists := os.LookupEnv(envVarName)
if exists {
return value, nil
} else {
return "", fmt.Errorf("environment variable %s not found", envVarName)
}
}
func main() {
var err error
var sourceBroker string
sourceBroker, err = readEnvironmentVariable("MQTT_SOURCE_BROKER")
if err != nil {
log.Fatal(err)
}
var sourcePort string
sourcePort, err = readEnvironmentVariable("MQTT_SOURCE_PORT")
if err != nil {
log.Fatal(err)
}
var sourceClientId string
sourceClientId, err = readEnvironmentVariable("MQTT_SOURCE_CLIENT_ID")
if err != nil {
log.Fatal(err)
}
var sourceUsername string
sourceUsername, err = readEnvironmentVariable("MQTT_SOURCE_USERNAME")
if err != nil {
log.Fatal(err)
}
var sourcePassword string
sourcePassword, err = readEnvironmentVariable("MQTT_SOURCE_PASSWORD")
if err != nil {
log.Fatal(err)
}
var sourceCaCert string
sourceCaCert, err = readEnvironmentVariable("MQTT_SOURCE_CA_ROOT_CERTIFICATE")
if err != nil {
log.Fatal(err)
}
var sourceClientCert string
sourceClientCert, err = readEnvironmentVariable("MQTT_SOURCE_CLIENT_CERTIFICATE")
if err != nil {
log.Fatal(err)
}
var sourceClientKey string
sourceClientKey, err = readEnvironmentVariable("MQTT_SOURCE_CLIENT_KEY")
if err != nil {
log.Fatal(err)
}
var sourceTopic string
sourceTopic, err = readEnvironmentVariable("MQTT_SOURCE_TOPIC")
if err != nil {
log.Fatal(err)
}
var targetBroker string
targetBroker, err = readEnvironmentVariable("MQTT_TARGET_BROKER")
if err != nil {
log.Fatal(err)
}
var targetPort string
targetPort, err = readEnvironmentVariable("MQTT_TARGET_PORT")
if err != nil {
log.Fatal(err)
}
var targetClientId string
targetClientId, err = readEnvironmentVariable("MQTT_TARGET_CLIENT_ID")
if err != nil {
log.Fatal(err)
}
var targetUsername string
targetUsername, err = readEnvironmentVariable("MQTT_TARGET_USERNAME")
if err != nil {
log.Fatal(err)
}
var targetPassword string
targetPassword, err = readEnvironmentVariable("MQTT_TARGET_PASSWORD")
if err != nil {
log.Fatal(err)
}
var targetCaCert string
targetCaCert, err = readEnvironmentVariable("MQTT_TARGET_CA_ROOT_CERTIFICATE")
if err != nil {
log.Fatal(err)
}
var targetClientCert string
targetClientCert, err = readEnvironmentVariable("MQTT_TARGET_CLIENT_CERTIFICATE")
if err != nil {
log.Fatal(err)
}
var targetClientKey string
targetClientKey, err = readEnvironmentVariable("MQTT_TARGET_CLIENT_KEY")
if err != nil {
log.Fatal(err)
}
var targetTopic string
targetTopic, err = readEnvironmentVariable("MQTT_TARGET_TOPIC")
if err != nil {
log.Fatal(err)
}
//Define the logging format (for debugging purposes)
mqtt.ERROR = log.New(os.Stdout, "[ERROR] ", 0)
mqtt.CRITICAL = log.New(os.Stdout, "[CRIT] ", 0)
mqtt.WARN = log.New(os.Stdout, "[WARN] ", 0)
//mqtt.DEBUG = log.New(os.Stdout, "[DEBUG] ", 0)
var targetClient = DefineTargetMqttClient(targetBroker, targetPort, targetClientId, targetUsername, targetPassword, targetCaCert, targetClientCert, targetClientKey);
ConnectClient(targetClient)
var sourceClient = DefineSourceMqttClient(sourceBroker, sourcePort, sourceClientId, sourceUsername, sourcePassword, sourceCaCert, sourceClientCert, sourceClientKey, targetClient, targetTopic);
ConnectClient(sourceClient)
//Subscribe to source topic
Subscribe(sourceClient, sourceTopic)
// Listen for exit signal
exitSignal := make(chan os.Signal, 1)
signal.Notify(exitSignal, syscall.SIGINT, syscall.SIGTERM)
// Wait for exit signal
<-exitSignal
// Disconnect MQTT client
sourceClient.Disconnect(250)
targetClient.Disconnect(250)
}