Skip to content

Commit efbe468

Browse files
authored
feat: allow NUM_WORKERS to be configurable (#12)
1 parent 8f80d90 commit efbe468

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ For a complete list of variables check the section below.
3030
| `PYROSCOPE_SELF_PROFILING` | `false` | whether to profile the extension itself or not |
3131
| `PYROSCOPE_LOG_LEVEL` | `info` | `error` or `info` or `debug` or `trace` |
3232
| `PYROSCOPE_TIMEOUT` | `10s` | http client timeout ([go duration format](https://pkg.go.dev/time#Duration)) |
33+
| `PYROSCOPE_NUM_WORKERS` | `5` | num of relay workers, pick based on the number of profile types |
3334

3435
# How it works
3536
The profiler will run as normal, and periodically will send data to the relay server (the server running at `http://localhost:4040`).

main.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ var (
3131
// to where relay data to
3232
remoteAddress = getEnvStrOr("PYROSCOPE_REMOTE_ADDRESS", "https://ingest.pyroscope.cloud")
3333

34-
authToken = getEnvStrOr("PYROSCOPE_AUTH_TOKEN", "")
35-
timeout = getEnvDurationOr("PYROSCOPE_TIMEOUT", time.Second*10)
34+
authToken = getEnvStrOr("PYROSCOPE_AUTH_TOKEN", "")
35+
timeout = getEnvDurationOr("PYROSCOPE_TIMEOUT", time.Second*10)
36+
numWorkers = getEnvIntOr("PYROSCOPE_NUM_WORKERS", 5)
3637

3738
// profile the extension?
3839
selfProfiling = getEnvBool("PYROSCOPE_SELF_PROFILING")
@@ -45,7 +46,7 @@ func main() {
4546
// Init components
4647
remoteClient := relay.NewRemoteClient(logger, &relay.RemoteClientCfg{Address: remoteAddress, AuthToken: authToken, Timeout: timeout})
4748
// TODO(eh-am): a find a better default for num of workers
48-
queue := relay.NewRemoteQueue(logger, &relay.RemoteQueueCfg{NumWorkers: 4}, remoteClient)
49+
queue := relay.NewRemoteQueue(logger, &relay.RemoteQueueCfg{NumWorkers: numWorkers}, remoteClient)
4950
ctrl := relay.NewController(logger, queue)
5051
server := relay.NewServer(logger, &relay.ServerCfg{ServerAddress: "0.0.0.0:4040"}, ctrl.RelayRequest)
5152

@@ -161,6 +162,7 @@ func getEnvStrOr(key string, fallback string) string {
161162

162163
return fallback
163164
}
165+
164166
func getEnvBool(key string) bool {
165167
k := os.Getenv(key)
166168
v, err := strconv.ParseBool(k)
@@ -178,6 +180,7 @@ func getEnvDurationOr(key string, fallback time.Duration) time.Duration {
178180
if ok && k != "" {
179181
dur, err := time.ParseDuration(k)
180182
if err != nil {
183+
logrus.Warnf("invalid value for env var '%s': '%s' defaulting to '%s'", key, k, fallback)
181184
return fallback
182185
}
183186

@@ -186,3 +189,19 @@ func getEnvDurationOr(key string, fallback time.Duration) time.Duration {
186189

187190
return fallback
188191
}
192+
193+
func getEnvIntOr(key string, fallback int) int {
194+
k, ok := os.LookupEnv(key)
195+
196+
// has an explicit value
197+
if ok && k != "" {
198+
val, err := strconv.Atoi(k)
199+
if err != nil {
200+
logrus.Warnf("invalid value for env var '%s': '%s' defaulting to '%d'", key, k, fallback)
201+
return fallback
202+
}
203+
return val
204+
}
205+
206+
return fallback
207+
}

relay/remotequeue.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func NewRemoteQueue(log *logrus.Entry, config *RemoteQueueCfg, relayer Relayer)
3030
// Setup defaults
3131
if config.NumWorkers == 0 {
3232
// TODO(eh-am): figure out a good default value?
33-
config.NumWorkers = 4
33+
config.NumWorkers = 5
3434
}
3535

3636
return &RemoteQueue{

0 commit comments

Comments
 (0)