Browse Source

added mq and database connected funcs and endpoint

0xdcarns 2 years ago
parent
commit
7a2c225eb1
6 changed files with 61 additions and 0 deletions
  1. 31 0
      controllers/server.go
  2. 7 0
      database/database.go
  3. 6 0
      database/postgres.go
  4. 6 0
      database/rqlite.go
  5. 6 0
      database/sqlite.go
  6. 5 0
      mq/mq.go

+ 31 - 0
controllers/server.go

@@ -6,8 +6,10 @@ import (
 	"strings"
 
 	"github.com/gorilla/mux"
+	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/mq"
 	"github.com/gravitl/netmaker/servercfg"
 )
 
@@ -19,6 +21,35 @@ func serverHandlers(r *mux.Router) {
 	}))
 	r.HandleFunc("/api/server/getconfig", allowUsers(http.HandlerFunc(getConfig))).Methods(http.MethodGet)
 	r.HandleFunc("/api/server/getserverinfo", authorize(true, false, "node", http.HandlerFunc(getServerInfo))).Methods(http.MethodGet)
+	r.HandleFunc("/api/server/status", http.HandlerFunc(getStatus)).Methods(http.MethodGet)
+}
+
+// swagger:route GET /api/server/status server getStatus
+//
+// Get the server configuration.
+//
+//			Schemes: https
+//
+//			Security:
+//	  		oauth
+//
+//			Responses:
+//				200: serverConfigResponse
+func getStatus(w http.ResponseWriter, r *http.Request) {
+	// TODO
+	// - check health of broker
+	type status struct {
+		DB     bool `json:"db_connected"`
+		Broker bool `json:"broker_connected"`
+	}
+
+	currentServerStatus := status{
+		DB:     database.IsConnected(),
+		Broker: mq.IsConnected(),
+	}
+
+	w.Header().Set("Content-Type", "application/json")
+	json.NewEncoder(w).Encode(&currentServerStatus)
 }
 
 // allowUsers - allow all authenticated (valid) users - only used by getConfig, may be able to remove during refactor

+ 7 - 0
database/database.go

@@ -80,6 +80,8 @@ const (
 	FETCH_ALL = "fetchall"
 	// CLOSE_DB - graceful close of db const
 	CLOSE_DB = "closedb"
+	// isconnected
+	isConnected = "isconnected"
 )
 
 func getCurrentDB() map[string]interface{} {
@@ -241,3 +243,8 @@ func initializeUUID() error {
 func CloseDB() {
 	getCurrentDB()[CLOSE_DB].(func())()
 }
+
+// IsConnected - tell if the database is connected or not
+func IsConnected() bool {
+	return getCurrentDB()[isConnected].(func() bool)()
+}

+ 6 - 0
database/postgres.go

@@ -22,6 +22,7 @@ var PG_FUNCTIONS = map[string]interface{}{
 	DELETE_ALL:   pgDeleteAllRecords,
 	FETCH_ALL:    pgFetchRecords,
 	CLOSE_DB:     pgCloseDB,
+	isConnected:  pgIsConnected,
 }
 
 func getPGConnString() string {
@@ -135,3 +136,8 @@ func pgFetchRecords(tableName string) (map[string]string, error) {
 func pgCloseDB() {
 	PGDB.Close()
 }
+
+func pgIsConnected() bool {
+	stats := PGDB.Stats()
+	return stats.OpenConnections > 0
+}

+ 6 - 0
database/rqlite.go

@@ -20,6 +20,7 @@ var RQLITE_FUNCTIONS = map[string]interface{}{
 	DELETE_ALL:   rqliteDeleteAllRecords,
 	FETCH_ALL:    rqliteFetchRecords,
 	CLOSE_DB:     rqliteCloseDB,
+	isConnected:  rqliteConnected,
 }
 
 func initRqliteDatabase() error {
@@ -104,3 +105,8 @@ func rqliteFetchRecords(tableName string) (map[string]string, error) {
 func rqliteCloseDB() {
 	RQliteDatabase.Close()
 }
+
+func rqliteConnected() bool {
+	leader, err := RQliteDatabase.Leader()
+	return err == nil && len(leader) > 0
+}

+ 6 - 0
database/sqlite.go

@@ -25,6 +25,7 @@ var SQLITE_FUNCTIONS = map[string]interface{}{
 	DELETE_ALL:   sqliteDeleteAllRecords,
 	FETCH_ALL:    sqliteFetchRecords,
 	CLOSE_DB:     sqliteCloseDB,
+	isConnected:  sqliteConnected,
 }
 
 func initSqliteDB() error {
@@ -135,3 +136,8 @@ func sqliteFetchRecords(tableName string) (map[string]string, error) {
 func sqliteCloseDB() {
 	SqliteDB.Close()
 }
+
+func sqliteConnected() bool {
+	stats := SqliteDB.Stats()
+	return stats.OpenConnections > 0
+}

+ 5 - 0
mq/mq.go

@@ -129,3 +129,8 @@ func Keepalive(ctx context.Context) {
 		}
 	}
 }
+
+// IsConnected - function for determining if the mqclient is connected or not
+func IsConnected() bool {
+	return mqclient != nil && mqclient.IsConnected()
+}