37 lines
647 B
Go
37 lines
647 B
Go
/*
|
|
Copyright IBM Corp All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package diag
|
|
|
|
import (
|
|
"bytes"
|
|
"runtime/pprof"
|
|
)
|
|
|
|
type Logger interface {
|
|
Infof(template string, args ...interface{})
|
|
Errorf(template string, args ...interface{})
|
|
}
|
|
|
|
func CaptureGoRoutines() (string, error) {
|
|
var buf bytes.Buffer
|
|
err := pprof.Lookup("goroutine").WriteTo(&buf, 2)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return buf.String(), nil
|
|
}
|
|
|
|
func LogGoRoutines(logger Logger) {
|
|
output, err := CaptureGoRoutines()
|
|
if err != nil {
|
|
logger.Errorf("failed to capture go routines: %s", err)
|
|
return
|
|
}
|
|
|
|
logger.Infof("Go routines report:\n%s", output)
|
|
}
|