github.com/mweagle/Sparta@v1.15.0/profile.go (about)

     1  package sparta
     2  
     3  import (
     4  	"fmt"
     5  	"path"
     6  	"path/filepath"
     7  
     8  	"github.com/sirupsen/logrus"
     9  )
    10  
    11  type profileLambdaDecorator func(stackName string, info *LambdaAWSInfo, S3Bucket string, logger *logrus.Logger) error
    12  
    13  var profileDecorator profileLambdaDecorator
    14  
    15  const (
    16  	cpuProfileName = "cpu"
    17  
    18  	// Name of the stack, published as env var
    19  	envVarStackName = "SPARTA_STACK_NAME"
    20  	// Stack instance id, published as env var
    21  	envVarStackInstanceID = "SPARTA_STACK_INSTANCE_ID"
    22  	// Bucket to use to store profile snapshots, published as env var
    23  	envVarProfileBucketName = "SPARTA_PROFILE_BUCKET_NAME"
    24  )
    25  
    26  var profileTypes = []string{
    27  	cpuProfileName,
    28  	"goroutine",
    29  	"threadcreate",
    30  	"heap",
    31  	"block",
    32  	"mutex",
    33  }
    34  
    35  func profileSnapshotRootKeypath(stackName string) string {
    36  	return path.Join("sparta", "pprof", stackName, "profiles")
    37  }
    38  
    39  func profileSnapshotRootKeypathForType(profileType string, stackName string) string {
    40  	return path.Join(profileSnapshotRootKeypath(stackName), profileType)
    41  }
    42  
    43  func cacheDirectoryForProfileType(profileType string, stackName string) string {
    44  	return filepath.Join(ScratchDirectory, "profiles", stackName, profileType)
    45  }
    46  
    47  func cachedAggregatedProfilePath(profileType string) string {
    48  	return filepath.Join(ScratchDirectory, fmt.Sprintf("%s.consolidated.profile", profileType))
    49  }