Code Monkey home page Code Monkey logo

deep-java-client's People

Contributors

dependabot[bot] avatar lmarkie avatar nihasa350 avatar snyk-bot avatar umaaz avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

lmarkie

deep-java-client's Issues

Metric Tracepoints

Is your feature request related to a problem? Please describe.
Add the ability to create tracepoints that will generate metrics (via the configured service, ie. prometheus). The metric value and lables should be calculated via expressions.

This would allow the ability to dynamically add a metric to track the length of a list for each user (for example).

Given the code (SomeClass.java):

10 public void doSomeWork(String userId, String someNewItem) {
11    var userdata = this.users.get(userId);
12    userdata.add(someNewItem);
13 }

We could add a tracepoint with the config:

{
  "file": "SomeClass.java",
  "line": 12,
  "metrics":[
    {
      "name": "user_data",
      "type": "gauge",
      "expression": "userdata.size()",
      "labels": {
          "user_id": "userId"
      }
    }
  ]
}

Additional context
Ensure that the metrics can be collected by the various providers that are common:

  • prometheus
  • otel

Can't load CFPlugin for ColdFusion 2023 on Windows

Describe the bug
When the ColdFusion 2023 service is ran on Windows, the sun.java.command system property doesn't exist.

This causes an NullPointerException to be thrown whilst loading the CFPlugin as the isActive method will use Utils.isCFServer to check that the property contains coldfusion.

This is a bigger problem since Deep's plugin loader changed as the previous plugin loader would have caught this exception preventing an interruption to Deep's startup.

To Reproduce
Steps to reproduce the behavior:

  1. Install CF 2023 service on Windows
  2. Attempt to start Deep with CFPlugin (was found via FusionReactor)
----------------------------------------------------------
ERROR: Failed to start deep agent: java.lang.reflect.InvocationTargetException null
----------------------------------------------------------
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at com.intergral.deep.agent.Agent.startNv(Agent.java:84)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at com.intergral.fusionreactor.deep.DeepComponent.loadDeep(DeepComponent.java:170)
        at com.intergral.fusionreactor.deep.DeepComponent.activate(DeepComponent.java:86)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:222)
        at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:37)
        at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:615)
        at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:499)
        at org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:295)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:302)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:113)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:847)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:814)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:763)
        at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:347)
        at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:247)
        at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:350)
        at org.apache.felix.framework.Felix.getService(Felix.java:3737)
        at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:470)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72)
        at org.apache.felix.scr.impl.helper.BindMethod.getServiceObject(BindMethod.java:646)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2130)
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:1644)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:1629)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:370)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:319)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:295)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1215)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1136)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:945)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:881)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1167)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:120)
        at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990)
        at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
        at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3587)
        at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:869)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:857)
        at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:915)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:715)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:399)
        at org.apache.felix.scr.impl.config.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:676)
        at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:339)
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:360)
        at org.apache.felix.scr.impl.Activator.access$000(Activator.java:53)
        at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:260)
        at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:259)
        at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:232)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:479)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:414)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
        at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:443)
        at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
        at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
        at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2174)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "String.contains(java.lang.CharSequence)" because the return value of "java.lang.System.getProperty(String)" is null
        at com.intergral.deep.plugin.cf.Utils.isCFServer(Utils.java:36)
        at com.intergral.deep.plugin.cf.CFPlugin.isActive(CFPlugin.java:54)
        at com.intergral.deep.agent.plugins.PluginSpiLoader.lambda$loadPlugins$1(PluginSpiLoader.java:62)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
        at com.intergral.deep.agent.plugins.PluginSpiLoader.loadPlugins(PluginSpiLoader.java:67)
        at com.intergral.deep.agent.DeepAgent.start(DeepAgent.java:75)
        at com.intergral.deep.agent.AgentImpl.startup(AgentImpl.java:56)
        ... 75 more

Expected behavior
Deep fails to start.

When started via the FusionReactor integration, FusionReactor will wait for Deep to be started, causing log spam and potentially blocking FusionReactor from starting fully.

java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at com.intergral.deep.api.DeepAPILoader.loadAPI(DeepAPILoader.java:48)
        at com.intergral.deep.api.DeepAPILoader.awaitAPI(DeepAPILoader.java:74)
        at com.intergral.fusionreactor.deep.DeepComponent.loadDeep(DeepComponent.java:173)
        at com.intergral.fusionreactor.deep.DeepComponent.activate(DeepComponent.java:86)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:222)
        at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:37)
        at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:615)
        at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:499)
        at org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:295)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:302)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:113)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:847)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:814)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:763)
        at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:347)
        at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:247)
        at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:350)
        at org.apache.felix.framework.Felix.getService(Felix.java:3737)
        at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:470)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72)
        at org.apache.felix.scr.impl.helper.BindMethod.getServiceObject(BindMethod.java:646)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2130)
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:1644)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:1629)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:370)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:319)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:295)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1215)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1136)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:945)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:881)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1167)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:120)
        at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990)
        at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
        at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3587)
        at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:869)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:857)
        at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:915)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:715)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:399)
        at org.apache.felix.scr.impl.config.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:676)
        at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:339)
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:360)
        at org.apache.felix.scr.impl.Activator.access$000(Activator.java:53)
        at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:260)
        at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:259)
        at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:232)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:479)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:414)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
        at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:443)
        at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
        at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
        at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2174)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalStateException: Must start DEEP first
        at com.intergral.deep.agent.AgentImpl.loadDeepAPI(AgentImpl.java:83)
        ... 72 more

Screenshots
Screenshot from 2024-03-11 12-37-09

Unsupported class file major version 64

Describe the bug
When running test app on Java 20.0.2-open this error is given:

Nov 21, 2023 3:01:27 PM com.intergral.deep.agent.tracepoint.inst.TracepointInstrumentationService transform
FINE: Transforming class: com/intergral/test/SimpleTest
Nov 21, 2023 3:01:27 PM com.intergral.deep.agent.tracepoint.inst.TracepointInstrumentationService transform
SEVERE: transform failed for com/intergral/test/SimpleTest
java.lang.IllegalArgumentException: Unsupported class file major version 64
	at com.intergral.deep.relocated.org.objectweb.asm.ClassReader.<init>(ClassReader.java:196)
	at com.intergral.deep.relocated.org.objectweb.asm.ClassReader.<init>(ClassReader.java:177)
	at com.intergral.deep.relocated.org.objectweb.asm.ClassReader.<init>(ClassReader.java:163)
	at com.intergral.deep.agent.tracepoint.inst.TracepointInstrumentationService.transform(TracepointInstrumentationService.java:363)
	at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244)
	at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
	at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:541)
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at com.intergral.test.Main.main(Main.java:62)

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'intergral/test-app-java'
  2. Configure to use Java 20.0.2-open (easiest to use sdkman)
  3. Run app
  4. See error in logs

Expected behavior
Should install and trigger tracepoint.

Additional context
Probably need a new version of ASM.

Use SPI to load plugins

Is your feature request related to a problem? Please describe.
Class loading can be complex in Java environments. We can change the plugins to use SPI to help mitigate these issues.

Describe the solution you'd like
Change all plugins to load via SPI, and remove the DeepAPI#registerPlugin API. This should help reduce the user error when creating and registering custom plugins.

Additional context
Will have to address how the FusionReactor integration is done with this change.

Failed plugins can prevent startup

Describe the bug
On startup then plugins can throw exceptions. This can cause deep to not start.

To Reproduce
See #113

Expected behavior
Should load all successful plugins.

Logging tracepoint

Is your feature request related to a problem? Please describe.
Have the ability to inject log messages into running code.

Describe the solution you'd like
Attach log messages to tracepoint to be injected and logged by the application.

Improved support for maps

Is your feature request related to a problem? Please describe.
Currently if a map is collected the key is always converted to a string, meaning that complex keys do not work.

Describe the solution you'd like
Wrap the key entries in a deep.MapEntry type. This allows the UI to treat all maps from all languages the same. This type should then define child variables as:

{
 type: 'deep.MapEntry',
 value: '0',
 hash: '123.0',
 children: [
    {
      id: '124',
      name: 'key'
    }
    {
      id: '125',
      name: 'value'
    }
  ]
}

Describe alternatives you've considered
Add explicitly the fields for map entries.

Additional context
Look at how NV handled this.

The Deep java agent can break applications that depend on grpc-netty-shaded

Describe the bug
When using grpc-netty-shaded as a maven dependency, at the same time as using the Deep java agent, the dependency can attempt to load services defined in the Deep jar (META-INF/services/).

To Reproduce
Steps to reproduce the behavior:

  1. Create a project which uses the grpc-netty-shaded dependency

Maven - pom.xml

<dependencies>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.36.1</version>
    </dependency>
</dependencies>

Java - Main.java

import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder;
import java.net.URI;
import java.net.URISyntaxException;

public class Main {
    public static void main( String[] args ) throws URISyntaxException {
        final String authority = new URI( "http://localhost:8888" ).getAuthority();
        NettyChannelBuilder.forTarget( authority );
    }
}
  1. Run with the Deep java agent attached: -javaagent:{path_to_deep_jar}
  2. You will see an Exception printed out:
Exception in thread "main" java.util.ServiceConfigurationError: io.grpc.NameResolverProvider: Provider io.grpc.netty.UdsNameResolverProvider not found
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1219)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
	at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
	at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
	at io.grpc.ServiceProviders.loadAll(ServiceProviders.java:67)
	at io.grpc.NameResolverRegistry.getDefaultRegistry(NameResolverRegistry.java:101)
	at io.grpc.internal.ManagedChannelImplBuilder.<init>(ManagedChannelImplBuilder.java:108)
	at io.grpc.internal.ManagedChannelImplBuilder.<init>(ManagedChannelImplBuilder.java:231)
	at io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder.<init>(NettyChannelBuilder.java:184)
	at io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder.forTarget(NettyChannelBuilder.java:152)
	at Main.main(Main.java:10)

Screenshots
Deep java agent services
deep

grpc-netty dependency services
netty

Additional context
Using the latest version of the Deep java agent on Java 16 and 17.0.8.
Error first found when using the FusionReactor java agent.

Nashhorn Error in logs

Describe the bug
There is an error in logs when Nashhorn is not available. This should be replaced with a one time warning.

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
image

Additional context
Java 17

Span Tracepoints

Is your feature request related to a problem? Please describe.
Create a way to generate a trace around a block of code (function/method) based on a tracepoint.

Describe the solution you'd like
Allow the tracepoint argument 'method_name' to to used in conjunction of a filename (in leu, or as well as line number).

If a method/function is found that matches the argument, then the function is wrapped in a span and attached to the existing span collection services (e.g. otel). If a line number is also specified then a normal tracepoint will be triggered on that line with in the original code. If there is no tracing supplier discovered or provided than no traces will be generated, and the tracepoint will either be ignored or simple act as a normal tracepoint.

Support Options

  • Otel
  • Opentracing
  • Datadog
  • FusionReactor

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.