diff --git a/tesseract/genconf/main.go b/tesseract/genconf/main.go index e30c39d..404e1d7 100644 --- a/tesseract/genconf/main.go +++ b/tesseract/genconf/main.go @@ -79,6 +79,11 @@ func loadConfig(yamlFile string) Config { log.Fatalf("Failed to parse YAML: %v", err) } + // Set default listen port if not configured + if len(config.Listen) == 0 { + config.Listen = []string{":8080"} + } + // Set defaults for log entries for i := range config.Logs { if config.Logs[i].PoolSize == 0 { diff --git a/tesseract/genconf/nginx.go b/tesseract/genconf/nginx.go index b5fc892..19c69e2 100644 --- a/tesseract/genconf/nginx.go +++ b/tesseract/genconf/nginx.go @@ -10,8 +10,8 @@ import ( ) const nginxTemplate = `server { - listen 8080; - listen [::]:8080; + listen {{.ListenPort}}; + listen [::]:{{.ListenPort}}; # Replace with your actual domain(s) server_name {{.MonitoringHost}}; @@ -70,13 +70,23 @@ const nginxTemplate = `server { ` type NginxTemplateData struct { - MonitoringHost string + MonitoringHost string LocalDirectory string + ListenPort string } func generateNginx(yamlFile string) { config := loadConfig(yamlFile) + // Extract port from first listen address + listenPort := "8080" // fallback default + if len(config.Listen) > 0 { + port := extractPort(config.Listen[0]) + if port != "" { + listenPort = port + } + } + for _, log := range config.Logs { // Extract hostname from monitoring prefix hostname, err := extractHostname(log.MonitoringPrefix) @@ -87,8 +97,9 @@ func generateNginx(yamlFile string) { // Create template data data := NginxTemplateData{ - MonitoringHost: hostname, + MonitoringHost: hostname, LocalDirectory: log.LocalDirectory, + ListenPort: listenPort, } // Parse and execute template @@ -121,6 +132,25 @@ func generateNginx(yamlFile string) { } } +func extractPort(listenAddr string) string { + // Handle common listen address formats: + // ":8080" -> "8080" + // "localhost:8080" -> "8080" + // "[::]:8080" -> "8080" + + if strings.HasPrefix(listenAddr, ":") { + return listenAddr[1:] // Remove the leading ":" + } + + // For addresses with host:port format + if strings.Contains(listenAddr, ":") { + parts := strings.Split(listenAddr, ":") + return parts[len(parts)-1] // Return the last part (port) + } + + return "" +} + func extractHostname(urlStr string) (string, error) { if !strings.HasPrefix(urlStr, "http://") && !strings.HasPrefix(urlStr, "https://") { urlStr = "https://" + urlStr