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")) }