reaction/app/pipe.go

82 lines
1.9 KiB
Go
Raw Permalink Normal View History

2023-05-03 20:03:22 +02:00
package app
import (
"encoding/gob"
"errors"
"net"
2023-05-03 20:03:22 +02:00
"os"
2023-05-05 15:33:00 +02:00
"path"
"time"
2023-10-12 12:00:00 +02:00
"framagit.org/ppom/reaction/logger"
2023-05-03 20:03:22 +02:00
)
func createOpenSocket() net.Listener {
err := os.MkdirAll(path.Dir(*SocketPath), 0755)
2023-05-05 15:33:00 +02:00
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Fatalln("Failed to create socket directory")
2023-05-05 15:33:00 +02:00
}
_, err = os.Stat(*SocketPath)
2023-05-03 20:03:22 +02:00
if err == nil {
2023-10-12 12:00:00 +02:00
logger.Println(logger.WARN, "socket", SocketPath, "already exists: Is the daemon already running? Deleting.")
err = os.Remove(*SocketPath)
2023-05-03 20:03:22 +02:00
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Fatalln("Failed to remove socket:", err)
2023-05-03 20:03:22 +02:00
}
}
ln, err := net.Listen("unix", *SocketPath)
2023-05-03 20:03:22 +02:00
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Fatalln("Failed to create socket:", err)
2023-05-03 20:03:22 +02:00
}
return ln
2023-05-03 20:03:22 +02:00
}
// Handle connections
//func SocketManager(streams map[string]*Stream) {
func SocketManager(conf *Conf) {
ln := createOpenSocket()
defer ln.Close()
2023-05-03 20:03:22 +02:00
for {
conn, err := ln.Accept()
2023-05-03 20:03:22 +02:00
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Println(logger.ERROR, "Failed to open connection from cli:", err)
continue
2023-05-03 20:03:22 +02:00
}
go func(conn net.Conn) {
defer conn.Close()
var request Request
2023-05-03 20:03:22 +02:00
var response Response
err := gob.NewDecoder(conn).Decode(&request)
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Println(logger.ERROR, "Invalid Message from cli:", err)
return
}
2023-05-03 20:03:22 +02:00
switch request.Request {
case Info:
// response.Config = *conf
response.Matches = matches
response.Actions = actions
2023-05-03 20:03:22 +02:00
case Flush:
le := LogEntry{time.Now(), 0, request.Flush.P, request.Flush.S, request.Flush.F, 0, false}
flushToMatchesC <- request.Flush
flushToActionsC <- request.Flush
2023-10-01 12:00:00 +02:00
flushToDatabaseC <- le
2023-05-03 20:03:22 +02:00
default:
logger.Println(logger.ERROR, "Invalid Message from cli: unrecognised command type")
response.Err = errors.New("unrecognised command type")
return
}
err = gob.NewEncoder(conn).Encode(response)
if err != nil {
2023-10-12 12:00:00 +02:00
logger.Println(logger.ERROR, "Can't respond to cli:", err)
return
2023-05-03 20:03:22 +02:00
}
}(conn)
2023-05-03 20:03:22 +02:00
}
}