Files
ironmount/go/main.go
Nicolas Meienberger a0be690eb9 chore: move to go folder
2025-08-20 22:15:43 +02:00

78 lines
1.9 KiB
Go

package main
import (
"ironmount/internal/constants"
"ironmount/internal/core"
"ironmount/internal/db"
"ironmount/internal/modules/driver"
"ironmount/internal/modules/volumes"
"net"
"net/http"
"os"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
)
func main() {
db.InitDB()
if err := os.MkdirAll("/run/docker/plugins", 0755); err != nil {
log.Fatal().Err(err).Msg("Failed to create plugin directory")
}
if err := os.MkdirAll(constants.VolumeRootLocal, 0755); err != nil {
log.Fatal().Err(err).Msg("Failed to create volume root")
}
if err := os.MkdirAll("/run/docker/plugins", 0755); err != nil {
log.Fatal().Err(err).Msg("Failed to create plugin directory")
}
socketPath := "/run/docker/plugins/ironmount.sock"
if err := os.RemoveAll(socketPath); err != nil {
log.Fatal().Err(err).Msg("Failed to remove existing socket")
}
gin.SetMode(gin.ReleaseMode)
router := gin.New()
router.Use(cors.Default())
router.Use(core.GinLogger())
router.Use(gin.Recovery())
router.GET("/api/health", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "ok"})
})
driver.SetupHandlers(router)
volumes.SetupHandlers(router)
unixListener, err := net.Listen("unix", socketPath)
if err != nil {
log.Fatal().Err(err).Msg("Failed to listen on socket")
}
tcpListener, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal().Err(err).Msg("Failed to listen on TCP port 8080")
}
unixServer := &http.Server{Handler: router}
tcpServer := &http.Server{Handler: router}
go func() {
log.Info().Msg("Listening on TCP :8080")
if err := tcpServer.Serve(tcpListener); err != nil && err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("TCP server error")
}
}()
log.Info().Msg("Listening on UNIX " + socketPath)
if err := unixServer.Serve(unixListener); err != nil && err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("Unix server error")
}
}