- High-performance batch data generation (~150k records/sec) - Seeded randomness for reproducible load tests - Rich Ethiopian data: names, phones (+251), cities, regions - Four data types: person, address, product, analytics - Three modes: CLI, Go library, HTTP API - Project skill available in .skills/go-faker/SKILL.md
43 lines
No EOL
775 B
Go
43 lines
No EOL
775 B
Go
package api
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
type Server struct {
|
|
addr string
|
|
mux *http.ServeMux
|
|
}
|
|
|
|
func NewServer(addr string) *Server {
|
|
mux := http.NewServeMux()
|
|
return &Server{addr: addr, mux: mux}
|
|
}
|
|
|
|
func (s *Server) Start() error {
|
|
handler := NewHandler("default-seed")
|
|
handler.RegisterRoutes(s.mux)
|
|
|
|
server := &http.Server{
|
|
Addr: s.addr,
|
|
Handler: s.mux,
|
|
}
|
|
|
|
go func() {
|
|
log.Printf("Go-Faker API server starting on %s", s.addr)
|
|
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
|
log.Fatalf("Server failed: %v", err)
|
|
}
|
|
}()
|
|
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
<-quit
|
|
|
|
log.Println("Shutting down server...")
|
|
return server.Close()
|
|
} |