feat: add DB_TIMEZONE configuration and update logging for PostgreSQL timezone
This commit is contained in:
+2
-2
@@ -8,7 +8,7 @@ OPENAI_MODEL=deepseek-v4-pro
|
|||||||
DB_MODE=sqlite
|
DB_MODE=sqlite
|
||||||
#DB_MODE=pgs
|
#DB_MODE=pgs
|
||||||
DB_PATH=./data/app.db
|
DB_PATH=./data/app.db
|
||||||
LOG_LEVEL=warn
|
LOG_LEVEL=info
|
||||||
STREAMING=true
|
STREAMING=true
|
||||||
|
DB_TIMEZONE=Europe/Istanbul
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ type Config struct {
|
|||||||
RequestTimeoutSeconds int
|
RequestTimeoutSeconds int
|
||||||
OpenAIModel string // default model when client omits it
|
OpenAIModel string // default model when client omits it
|
||||||
Streaming bool // enable/disable SSE streaming responses
|
Streaming bool // enable/disable SSE streaming responses
|
||||||
|
DBTimezone string // PostgreSQL session timezone (e.g. "Europe/Istanbul")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load reads environment variables and returns a populated Config.
|
// Load reads environment variables and returns a populated Config.
|
||||||
@@ -51,6 +52,7 @@ func Load() *Config {
|
|||||||
|
|
||||||
openAIApiKey := os.Getenv("OPENAI_KEY")
|
openAIApiKey := os.Getenv("OPENAI_KEY")
|
||||||
openAIModel := os.Getenv("OPENAI_MODEL")
|
openAIModel := os.Getenv("OPENAI_MODEL")
|
||||||
|
dbTimezone := os.Getenv("DB_TIMEZONE")
|
||||||
|
|
||||||
streaming := true
|
streaming := true
|
||||||
if v := os.Getenv("STREAMING"); v != "" {
|
if v := os.Getenv("STREAMING"); v != "" {
|
||||||
@@ -70,5 +72,6 @@ func Load() *Config {
|
|||||||
RequestTimeoutSeconds: timeoutSec,
|
RequestTimeoutSeconds: timeoutSec,
|
||||||
OpenAIModel: openAIModel,
|
OpenAIModel: openAIModel,
|
||||||
Streaming: streaming,
|
Streaming: streaming,
|
||||||
|
DBTimezone: dbTimezone,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -20,6 +20,7 @@
|
|||||||
| `REQUEST_TIMEOUT_SECONDS` | `30` | `RequestTimeoutSeconds` | Upstream istek zaman aşımı (saniye) |
|
| `REQUEST_TIMEOUT_SECONDS` | `30` | `RequestTimeoutSeconds` | Upstream istek zaman aşımı (saniye) |
|
||||||
| `OPENAI_MODEL` | `""` | `OpenAIModel` | Varsayılan model adı (istekte model yoksa enjekte edilir) |
|
| `OPENAI_MODEL` | `""` | `OpenAIModel` | Varsayılan model adı (istekte model yoksa enjekte edilir) |
|
||||||
| `STREAMING` | `true` | `Streaming` | SSE streaming yanıtlarını etkinleştir/devre dışı bırak (`true`/`false`) |
|
| `STREAMING` | `true` | `Streaming` | SSE streaming yanıtlarını etkinleştir/devre dışı bırak (`true`/`false`) |
|
||||||
|
| `DB_TIMEZONE` | `""` | `DBTimezone` | PostgreSQL oturum zaman dilimi (örn: `Europe/Istanbul`) |
|
||||||
|
|
||||||
## Önemli Detaylar
|
## Önemli Detaylar
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
@@ -67,7 +68,11 @@ func main() {
|
|||||||
dialector = sqlite.Open(dsn)
|
dialector = sqlite.Open(dsn)
|
||||||
dbEngine = "sqlite"
|
dbEngine = "sqlite"
|
||||||
default:
|
default:
|
||||||
dialector = postgres.Open(cfg.PostgresDSN)
|
dsn := cfg.PostgresDSN
|
||||||
|
if cfg.DBTimezone != "" {
|
||||||
|
dsn = appendQueryParam(dsn, "timezone", cfg.DBTimezone)
|
||||||
|
}
|
||||||
|
dialector = postgres.Open(dsn)
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@@ -161,9 +166,27 @@ func main() {
|
|||||||
log.Printf(" DB logging : enabled")
|
log.Printf(" DB logging : enabled")
|
||||||
}
|
}
|
||||||
log.Printf(" SSE streaming : %v", cfg.Streaming)
|
log.Printf(" SSE streaming : %v", cfg.Streaming)
|
||||||
|
if cfg.DBTimezone != "" {
|
||||||
|
log.Printf(" DB timezone : %s", cfg.DBTimezone)
|
||||||
|
}
|
||||||
|
|
||||||
if err := app.Listen(addr); err != nil {
|
if err := app.Listen(addr); err != nil {
|
||||||
log.Fatalf("server error: %v", err)
|
log.Fatalf("server error: %v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func appendQueryParam(dsn, key, value string) string {
|
||||||
|
if value == "" {
|
||||||
|
return dsn
|
||||||
|
}
|
||||||
|
u, err := url.Parse(dsn)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("⚠️ Failed to parse DSN for timezone: %v", err)
|
||||||
|
return dsn
|
||||||
|
}
|
||||||
|
q := u.Query()
|
||||||
|
q.Set(key, value)
|
||||||
|
u.RawQuery = q.Encode()
|
||||||
|
return u.String()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user