Add spider-net and auto docker stuff

This commit is contained in:
2024-07-12 23:17:24 +02:00
parent 846016166e
commit ca68c88fa9
13 changed files with 167 additions and 0 deletions

1
spider-net/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
spider-net

13
spider-net/Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM golang:1.22.5
WORKDIR /app
#COPY go.mod go.sum ./
#RUN go mod download
#COPY *.go ./
#RUN CGO_ENABLED=0 GOOS=linux go build -o /spider-net
COPY spider-net /spider-net
CMD ["/spider-net"]

3
spider-net/build_and_upload.sh Executable file
View File

@@ -0,0 +1,3 @@
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o spider-net
cd ..
./docker.sh compose up spider-net -d --build

10
spider-net/go.mod Normal file
View File

@@ -0,0 +1,10 @@
module spider-mqtt
go 1.22
require (
github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sync v0.1.0 // indirect
)

8
spider-net/go.sum Normal file
View File

@@ -0,0 +1,8 @@
github.com/eclipse/paho.mqtt.golang v1.4.3 h1:2kwcUGn8seMUfWndX0hGbvH8r7crgcJguQNCyp70xik=
github.com/eclipse/paho.mqtt.golang v1.4.3/go.mod h1:CSYvoAlsMkhYOXh/oKyxa8EcBci6dVkLCbo5tTC1RIE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

68
spider-net/main.go Normal file
View File

@@ -0,0 +1,68 @@
package main
import (
"fmt"
mqtt "github.com/eclipse/paho.mqtt.golang"
"log"
"net"
"os"
"time"
)
func getLocalIP() (string, error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return "", err
}
for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
return ipnet.IP.String(), nil
}
}
}
return "", fmt.Errorf("no IP address found")
}
func publishIp(client mqtt.Client, topic string) {
log.Printf("Publishing IP")
ip, err := getLocalIP()
if err != nil {
log.Printf("Error getting IP address: %v\n", err)
return
}
token := client.Publish(topic, 0, true, ip)
token.Wait()
if token.Error() != nil {
log.Printf("Error publishing IP address: %v\n", token.Error())
} else {
log.Printf("Published IP address: %s\n", ip)
}
}
func main() {
broker := "tcp://mqtt.seeseepuff.be:1883"
topic := "host/" + os.Getenv("SPIDER_HOSTNAME")
opts := mqtt.NewClientOptions()
opts.AddBroker(broker)
opts.SetClientID("spider-host-client")
client := mqtt.NewClient(opts)
token := client.Connect()
token.Wait()
if token.Error() != nil {
log.Fatalf("Error connecting to MQTT broker: %v\n", token.Error())
}
ticker := time.NewTicker(60 * time.Second)
defer ticker.Stop()
publishIp(client, topic)
for {
select {
case <-ticker.C:
publishIp(client, topic)
}
}
}