diff --git a/controllers/server.go b/controllers/server.go index 84f732b9..bcb4495e 100644 --- a/controllers/server.go +++ b/controllers/server.go @@ -3,6 +3,7 @@ package controller import ( "encoding/json" "net/http" + "os" "strings" "syscall" "time" @@ -17,6 +18,8 @@ import ( "github.com/gravitl/netmaker/servercfg" ) +var cpuProfileLog *os.File + func serverHandlers(r *mux.Router) { // r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(true, http.HandlerFunc(addNetwork))).Methods(http.MethodPost) r.HandleFunc( @@ -43,6 +46,21 @@ func serverHandlers(r *mux.Router) { r.HandleFunc("/api/server/status", getStatus).Methods(http.MethodGet) r.HandleFunc("/api/server/usage", logic.SecurityCheck(false, http.HandlerFunc(getUsage))). Methods(http.MethodGet) + r.HandleFunc("/api/server/cpu_profile", cpuProfile). + Methods(http.MethodPost) +} + +func cpuProfile(w http.ResponseWriter, r *http.Request) { + start := r.URL.Query().Get("action") == "start" + if start { + os.Remove("/root/data/cpu.prof") + cpuProfileLog = logic.StartCPUProfiling() + } else { + if cpuProfileLog != nil { + logic.StopCPUProfiling(cpuProfileLog) + cpuProfileLog = nil + } + } } func getUsage(w http.ResponseWriter, _ *http.Request) { diff --git a/logic/acls.go b/logic/acls.go index 81b1f0b4..43500de2 100644 --- a/logic/acls.go +++ b/logic/acls.go @@ -458,6 +458,7 @@ func IsUserAllowedToCommunicate(userName string, peer models.Node) bool { // IsNodeAllowedToCommunicate - check node is allowed to communicate with the peer func IsNodeAllowedToCommunicate(node, peer models.Node) bool { + return true if node.IsStatic { node = node.StaticNode.ConvertToStaticNode() } diff --git a/logic/acls/nodeacls/retrieve.go b/logic/acls/nodeacls/retrieve.go index 4411c5b2..46c7c8e0 100644 --- a/logic/acls/nodeacls/retrieve.go +++ b/logic/acls/nodeacls/retrieve.go @@ -13,6 +13,7 @@ var NodesAllowedACLMutex = &sync.Mutex{} // AreNodesAllowed - checks if nodes are allowed to communicate in their network ACL func AreNodesAllowed(networkID NetworkID, node1, node2 NodeID) bool { + return true NodesAllowedACLMutex.Lock() defer NodesAllowedACLMutex.Unlock() var currentNetworkACL, err = FetchAllACLs(networkID) diff --git a/logic/proc.go b/logic/proc.go new file mode 100644 index 00000000..c602d6a4 --- /dev/null +++ b/logic/proc.go @@ -0,0 +1,23 @@ +package logic + +import ( + "log" + "os" + "runtime/pprof" +) + +func StartCPUProfiling() *os.File { + f, err := os.OpenFile("/root/data/cpu.prof", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755) + if err != nil { + log.Fatal("could not create CPU profile: ", err) + } + if err := pprof.StartCPUProfile(f); err != nil { + log.Fatal("could not start CPU profile: ", err) + } + return f +} + +func StopCPUProfiling(f *os.File) { + pprof.StopCPUProfile() + f.Close() +} diff --git a/main.go b/main.go index 10bb52b8..360ab9b7 100644 --- a/main.go +++ b/main.go @@ -51,6 +51,9 @@ func main() { logic.SetAllocatedIpMap() defer logic.ClearAllocatedIpMap() setGarbageCollection() + // Start profiling + // profFile := logic.StartCPUProfiling() + // defer logic.StopCPUProfiling(profFile) setVerbosity() if servercfg.DeployedByOperator() && !servercfg.IsPro { logic.SetFreeTierLimits()