Files
llm-intelligence/scripts/intraday_discovery_common.go
phamnazage-jpg 475401bcbe
Some checks failed
CI / go-test (push) Has been cancelled
CI / scripts-regression (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / docker-build (push) Has been cancelled
feat(intraday): add discovery and verification watch pipeline
2026-05-27 18:54:32 +08:00

112 lines
2.4 KiB
Go

//go:build llm_script
package main
import (
"fmt"
"os"
"regexp"
"strings"
"time"
)
func loadIntradayEnv() {
for _, path := range []string{".env.local", ".env"} {
data, err := os.ReadFile(path)
if err != nil {
continue
}
for _, line := range strings.Split(string(data), "\n") {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
key, value, ok := strings.Cut(line, "=")
if !ok {
continue
}
key = strings.TrimSpace(key)
value = strings.Trim(strings.TrimSpace(value), `"'`)
if key == "" {
continue
}
if _, exists := os.LookupEnv(key); exists {
continue
}
_ = os.Setenv(key, value)
}
}
}
func intradayDefaultDSN() string {
if dsn := os.Getenv("DATABASE_URL"); dsn != "" {
return dsn
}
return "postgres://long@/llm_intelligence?host=/var/run/postgresql"
}
func intradayDateValue() string {
if value := strings.TrimSpace(os.Getenv("REPORT_DATE")); value != "" {
return value
}
return time.Now().Format("2006-01-02")
}
func discoveryTimeoutFromEnv() time.Duration {
raw := strings.TrimSpace(os.Getenv("INTRADAY_DISCOVERY_TIMEOUT_SEC"))
if raw == "" {
return 20 * time.Second
}
var seconds int
if _, err := fmt.Sscanf(raw, "%d", &seconds); err != nil || seconds <= 0 {
return 20 * time.Second
}
return time.Duration(seconds) * time.Second
}
func normalizeIntradayEventType(value string) string {
switch strings.TrimSpace(strings.ToLower(value)) {
case "price_cut":
return "price_cut"
case "price_increase":
return "price_increase"
case "official_release":
return "official_release"
case "promo_campaign":
return "promo_campaign"
case "leak_or_rumor":
return "leak_or_rumor"
default:
return "unknown"
}
}
func normalizeWord(value string) string {
value = strings.ToLower(strings.TrimSpace(value))
value = strings.ReplaceAll(value, "_", "-")
re := regexp.MustCompile(`[^a-z0-9\-]+`)
value = re.ReplaceAllString(value, "-")
value = strings.Trim(value, "-")
if value == "" {
return "unknown"
}
return value
}
func dedupeStrings(values []string) []string {
seen := map[string]struct{}{}
result := make([]string, 0, len(values))
for _, value := range values {
trimmed := strings.TrimSpace(value)
if trimmed == "" {
continue
}
if _, exists := seen[trimmed]; exists {
continue
}
seen[trimmed] = struct{}{}
result = append(result, trimmed)
}
return result
}