Initial extraction from fn_registry
sqlite_api: API REST HTTP read-only sobre registry.db y operations.db. Bind por defecto 127.0.0.1:8484. Go + net/http + SQLite FTS5. Extraido de fn_registry/projects/fn_monitoring/apps/sqlite_api/ como repo independiente. La metadata del registry queda en project.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func main() {
|
||||
bind := flag.String("bind", "127.0.0.1:8484", "address to bind")
|
||||
flag.Parse()
|
||||
|
||||
root := findRegistryRoot()
|
||||
if root == "" {
|
||||
log.Fatal("cannot find fn_registry root (no registry.db found). Set FN_REGISTRY_ROOT or run from the registry directory.")
|
||||
}
|
||||
|
||||
pool := NewDBPool()
|
||||
for _, entry := range DiscoverDatabases(root) {
|
||||
pool.Register(entry)
|
||||
log.Printf("registered database: %s (%s)", entry.Alias, entry.Path)
|
||||
}
|
||||
|
||||
srv := NewServer(pool)
|
||||
mux := http.NewServeMux()
|
||||
srv.Routes(mux)
|
||||
|
||||
handler := corsMiddleware(mux)
|
||||
|
||||
log.Printf("sqlite_api listening on %s (registry root: %s)", *bind, root)
|
||||
if err := http.ListenAndServe(*bind, handler); err != nil {
|
||||
log.Fatalf("server error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// findRegistryRoot walks up from cwd (or uses FN_REGISTRY_ROOT) to find registry.db.
|
||||
func findRegistryRoot() string {
|
||||
if env := os.Getenv("FN_REGISTRY_ROOT"); env != "" {
|
||||
if _, err := os.Stat(filepath.Join(env, "registry.db")); err == nil {
|
||||
return env
|
||||
}
|
||||
}
|
||||
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
for {
|
||||
if _, err := os.Stat(filepath.Join(dir, "registry.db")); err == nil {
|
||||
return dir
|
||||
}
|
||||
parent := filepath.Dir(dir)
|
||||
if parent == dir {
|
||||
break
|
||||
}
|
||||
dir = parent
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.Ltime)
|
||||
log.SetPrefix("[sqlite_api] ")
|
||||
fmt.Fprintln(os.Stderr, "sqlite_api — HTTP API for fn_registry databases")
|
||||
}
|
||||
Reference in New Issue
Block a user