-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
68 lines (58 loc) · 1.91 KB
/
main.go
File metadata and controls
68 lines (58 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"log"
"net/http"
"os"
"time"
"github.com/gorilla/mux"
"github.com/pgElephant/pgControlPlane/auth"
"github.com/pgElephant/pgControlPlane/handlers"
"github.com/pgElephant/pgControlPlane/pkg/store"
"github.com/pgElephant/pgControlPlane/reconciler"
)
func main() {
addr := ":8080"
if v := os.Getenv("PGCP_ADDR"); v != "" {
addr = v
}
r := mux.NewRouter()
// initialize simple file-backed store for jobs (prototype)
if err := store.Init(""); err != nil {
log.Fatalf("failed to init store: %v", err)
}
// Public
r.HandleFunc("/api/v1/login", auth.LoginHandler).Methods("POST")
// Protected
api := r.PathPrefix("/api/v1").Subrouter()
api.Use(auth.JWTMiddleware)
api.HandleFunc("/clusters", handlers.ListClustersHandler).Methods("GET")
api.HandleFunc("/clusters", handlers.CreateClusterHandler).Methods("POST")
api.HandleFunc("/agents/register", handlers.RegisterAgentHandler).Methods("POST")
api.HandleFunc("/agents/heartbeat", handlers.HeartbeatAgentHandler).Methods("POST")
api.HandleFunc("/backup", handlers.BackupRequest).Methods("POST")
// nodes and cluster actions
api.HandleFunc("/clusters/{cluster}/nodes", handlers.ListNodesHandler).Methods("GET")
api.HandleFunc("/clusters/{cluster}/nodes", handlers.CreateNodeHandler).Methods("POST")
api.HandleFunc("/clusters/{cluster}/status", handlers.ClusterStatusHandler).Methods("GET")
api.HandleFunc("/clusters/{cluster}/promote", handlers.PromoteHandler).Methods("POST")
stopCh := make(chan struct{})
reconciler.StartReconciler(stopCh)
// prune stale agent registrations periodically
go func() {
ticker := time.NewTicker(1 * time.Minute)
defer ticker.Stop()
for {
select {
case <-stopCh:
return
case <-ticker.C:
handlers.PruneStaleAgents(5 * time.Minute)
}
}
}()
log.Printf("listening on %s", addr)
if err := http.ListenAndServe(addr, r); err != nil {
close(stopCh)
log.Fatalf("server failed: %v", err)
}
}