90 lines
2.5 KiB
Go
90 lines
2.5 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/docs"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/config"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/handlers"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/repository"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/storage"
|
|
"github.com/gin-gonic/gin"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
)
|
|
|
|
// @securityDefinitions.apikey Bearer
|
|
// @in header
|
|
// @name Authorization
|
|
// @description Type "Bearer" followed by a space and the JWT token.
|
|
|
|
func main() {
|
|
cfg_path, ok := os.LookupEnv("CONFIG_FILE")
|
|
if !ok {
|
|
cfg_path = "/etc/hellreign/config.yml"
|
|
}
|
|
cfg, err := config.ImportSettings(cfg_path)
|
|
if err != nil {
|
|
log.Fatalf("Err loading config")
|
|
}
|
|
|
|
db, err := storage.Open(cfg.Database.Token_db)
|
|
if err != nil {
|
|
log.Fatalf("Err opening database")
|
|
}
|
|
defer db.Close()
|
|
|
|
h := handlers.New(db)
|
|
agents := handlers.AgentsGroup{Handlers: h}
|
|
|
|
router := gin.Default()
|
|
docs.SwaggerInfo.BasePath = "/api/v1"
|
|
docs.SwaggerInfo.Title = "HellreigN"
|
|
docs.SwaggerInfo.Version = "1.0"
|
|
docs.SwaggerInfo.Description = "API for HellreigN"
|
|
docs.SwaggerInfo.Schemes = []string{"http"}
|
|
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
|
|
v1 := router.Group("/api/v1")
|
|
{
|
|
agentsGroup := v1.Group("/agents")
|
|
{
|
|
agentsGroup.GET("", agents.List)
|
|
}
|
|
|
|
logsGroup := v1.Group("/logs")
|
|
{
|
|
if cfg.Database.Clickhouse_host != "" {
|
|
chConn, err := storage.OpenClickHouse(storage.ClickHouseConfig{
|
|
Host: cfg.Database.Clickhouse_host,
|
|
User: cfg.Database.Clickhouse_user,
|
|
Password: cfg.Database.Clickhouse_password,
|
|
Database: cfg.Database.Clickhouse_database,
|
|
})
|
|
if err != nil {
|
|
log.Printf("Warning: ClickHouse connection failed: %v", err)
|
|
} else {
|
|
defer chConn.Close()
|
|
|
|
logRepo := repository.NewLogRepository(chConn)
|
|
if err := logRepo.Init(context.Background()); err != nil {
|
|
log.Printf("Warning: Failed to initialize logs table: %v", err)
|
|
}
|
|
|
|
logHandlers := handlers.NewLogHandlers(logRepo)
|
|
logsGroup.POST("", logHandlers.Insert)
|
|
logsGroup.POST("/batch", logHandlers.InsertBatch)
|
|
logsGroup.GET("", logHandlers.Search)
|
|
logsGroup.GET("/services", logHandlers.GetServices)
|
|
logsGroup.GET("/agents", logHandlers.GetAgents)
|
|
logsGroup.GET("/levels", logHandlers.GetLevels)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
log.Fatal(router.Run(":8080"))
|
|
}
|