Skip to content

Commit

Permalink
Add ProfilerApi for consumption by other libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
aleks-p committed Dec 20, 2024
1 parent 1cc00a1 commit 2999072
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 3 deletions.
28 changes: 28 additions & 0 deletions agent/src/main/java/io/pyroscope/javaagent/ProfilerSdk.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.pyroscope.javaagent;

import io.pyroscope.javaagent.api.ProfilerScopedContext;
import io.pyroscope.javaagent.api.ProfilerApi;
import io.pyroscope.javaagent.config.Config;
import io.pyroscope.javaagent.impl.ProfilerScopedContextWrapper;
import io.pyroscope.labels.LabelsSet;
import io.pyroscope.labels.ScopedContext;

import java.util.Map;

public class ProfilerSdk implements ProfilerApi {

@Override
public void startProfiling() {
PyroscopeAgent.start(Config.build());
}

@Override
public boolean isProfilingStarted() {
return PyroscopeAgent.isStarted();
}

@Override
public ProfilerScopedContext createScopedContext(Map<String, String> labels) {
return new ProfilerScopedContextWrapper(new ScopedContext(new LabelsSet(labels)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.pyroscope.javaagent.api;

import java.util.Map;

public interface ProfilerApi {
void startProfiling();
boolean isProfilingStarted();
ProfilerScopedContext createScopedContext(Map<String, String> labels);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.pyroscope.javaagent.api;

import java.util.function.BiConsumer;

public interface ProfilerScopedContext {
void forEachLabel(BiConsumer<String, String> consumer);
void close();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.pyroscope.javaagent.impl;

import io.pyroscope.javaagent.api.ProfilerScopedContext;
import io.pyroscope.labels.ScopedContext;

import java.util.function.BiConsumer;

public class ProfilerScopedContextWrapper implements ProfilerScopedContext {
private final ScopedContext ctx;

public ProfilerScopedContextWrapper(ScopedContext ctx) {
this.ctx = ctx;
}

@Override
public void forEachLabel(BiConsumer<String, String> consumer) {
ctx.forEachLabel(consumer);
}

@Override
public void close() {
ctx.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public ScopedContext(LabelsSet labels) {
context.set(current);
}


@Override
public void close() {
if (closed) {
Expand All @@ -73,9 +72,9 @@ public void close() {
AsyncProfiler.getInstance().setContextId(previous.id);
}

public void forEach(BiConsumer<String, String> consumer) {
public void forEachLabel(BiConsumer<String, String> labelConsumer) {
for (Map.Entry<Ref<String>, Ref<String>> it : current.labels.entrySet()) {
consumer.accept(it.getKey().val, it.getValue().val);
labelConsumer.accept(it.getKey().val, it.getValue().val);
}
}

Expand Down

0 comments on commit 2999072

Please sign in to comment.