mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-10 23:24:32 +08:00
add cpu profiling endpoint
This commit is contained in:
parent
bb06ddaabe
commit
16b693815f
5 changed files with 46 additions and 0 deletions
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
23
logic/proc.go
Normal file
23
logic/proc.go
Normal file
|
@ -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()
|
||||
}
|
3
main.go
3
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()
|
||||
|
|
Loading…
Add table
Reference in a new issue