Search in sources :

Example 6 with FlashlightProbe

use of org.glassfish.flashlight.provider.FlashlightProbe in project Payara by payara.

the class FlashlightProbeClientMediator method handleListenerAnnotations.

/**
 * Pick out all methods in the listener with the correct annotation, look up
 * the referenced Probe and return a list of all such pairs. Validate that
 * the methods really do matchup properly.
 *
 * @throws RuntimeException if there is any serious problem.
 * @param listenerClass
 * @return
 */
private List<MethodProbe> handleListenerAnnotations(Class listenerClass, String invokerId) {
    List<MethodProbe> mp = new LinkedList<MethodProbe>();
    for (Method method : listenerClass.getMethods()) {
        ProbeListener probeAnn = method.getAnnotation(ProbeListener.class);
        if (probeAnn == null)
            continue;
        String probeString = probeAnn.value();
        if (probeString == null)
            continue;
        if (invokerId != null) {
            String[] strArr = probeString.split(":");
            probeString = strArr[0] + ":" + strArr[1] + ":" + strArr[2] + invokerId + ":" + strArr[3];
        }
        FlashlightProbe probe = probeRegistry.getProbe(probeString);
        if (probe == null) {
            String errStr = localStrings.getLocalString("probeNotRegistered", "Probe is not registered: {0}", probeString);
            throw new RuntimeException(errStr);
        }
        mp.add(new MethodProbe(method, probe));
    }
    return mp;
}
Also used : FlashlightProbe(org.glassfish.flashlight.provider.FlashlightProbe) Method(java.lang.reflect.Method) LinkedList(java.util.LinkedList) ProbeListener(org.glassfish.external.probe.provider.annotations.ProbeListener)

Example 7 with FlashlightProbe

use of org.glassfish.flashlight.provider.FlashlightProbe in project Payara by payara.

the class FlashlightProbeClientMediator method registerDTraceListener.

private Object registerDTraceListener(FlashlightProbeProvider propro, List<ProbeClientMethodHandle> pcms, List<FlashlightProbe> probesRequiringClassTransformation) {
    // The "listener" needs to be registered against every Probe in propro...
    Collection<FlashlightProbe> probes = propro.getProbes();
    Object listener = null;
    for (FlashlightProbe probe : probes) {
        ProbeClientInvoker invoker = ProbeClientInvokerFactory.createDTraceInvoker(probe);
        ProbeClientMethodHandleImpl hi = new ProbeClientMethodHandleImpl(invoker.getId(), invoker, probe);
        pcms.add(hi);
        if (probe.addInvoker(invoker))
            probesRequiringClassTransformation.add(probe);
        if (listener == null)
            // all the probes in propro have the same "listener"
            listener = probe.getDTraceProviderImpl();
    }
    return listener;
}
Also used : FlashlightProbe(org.glassfish.flashlight.provider.FlashlightProbe) ProbeClientInvoker(org.glassfish.flashlight.client.ProbeClientInvoker)

Example 8 with FlashlightProbe

use of org.glassfish.flashlight.provider.FlashlightProbe in project Payara by payara.

the class ProbeRegistry method getAllProbes.

public Collection<FlashlightProbe> getAllProbes() {
    Collection<FlashlightProbe> allProbes = probeMap.values();
    Collection<FlashlightProbe> visibleProbes = new ArrayList<FlashlightProbe>();
    for (FlashlightProbe probe : allProbes) {
        if (!probe.isHidden())
            visibleProbes.add(probe);
    }
    return visibleProbes;
}
Also used : FlashlightProbe(org.glassfish.flashlight.provider.FlashlightProbe) ArrayList(java.util.ArrayList)

Example 9 with FlashlightProbe

use of org.glassfish.flashlight.provider.FlashlightProbe in project Payara by payara.

the class ProbeFactory method createProbe.

public static FlashlightProbe createProbe(Class providerClazz, String moduleProviderName, String moduleName, String probeProviderName, String probeName, String[] paramNames, Class[] paramTypes, boolean self, boolean hidden, boolean stateful, boolean statefulReturn, boolean statefulException, String[] profileNames) {
    int id = counter.incrementAndGet();
    FlashlightProbe probe = new FlashlightProbe(id, providerClazz, moduleProviderName, moduleName, probeProviderName, probeName, paramNames, paramTypes, self, hidden, stateful, statefulReturn, statefulException, profileNames);
    probeRegistry.registerProbe(probe);
    return probe;
}
Also used : FlashlightProbe(org.glassfish.flashlight.provider.FlashlightProbe)

Example 10 with FlashlightProbe

use of org.glassfish.flashlight.provider.FlashlightProbe in project Payara by payara.

the class ProviderImplGenerator method generateConstructor.

private void generateConstructor(ClassWriter cw, String generatedClassName, FlashlightProbeProvider provider) {
    Method m = Method.getMethod("void <init> ()");
    GeneratorAdapter gen = new GeneratorAdapter(Opcodes.ACC_PUBLIC, m, null, null, cw);
    gen.loadThis();
    gen.invokeConstructor(Type.getType(Object.class), m);
    Type probeRegType = Type.getType(ProbeRegistry.class);
    Type probeType = Type.getType(FlashlightProbe.class);
    gen.loadThis();
    for (FlashlightProbe probe : provider.getProbes()) {
        gen.dup();
        String fieldName = "_flashlight_" + probe.getProbeName();
        gen.push(probe.getId());
        gen.invokeStatic(probeRegType, Method.getMethod("org.glassfish.flashlight.provider.FlashlightProbe getProbeById(int)"));
        gen.visitFieldInsn(Opcodes.PUTFIELD, generatedClassName, fieldName, probeType.getDescriptor());
    }
    gen.pop();
    // return the value from constructor
    gen.returnValue();
    gen.endMethod();
}
Also used : Type(org.glassfish.hk2.external.org.objectweb.asm.Type) FlashlightProbe(org.glassfish.flashlight.provider.FlashlightProbe) GeneratorAdapter(org.glassfish.hk2.external.org.objectweb.asm.commons.GeneratorAdapter) Method(org.glassfish.hk2.external.org.objectweb.asm.commons.Method)

Aggregations

FlashlightProbe (org.glassfish.flashlight.provider.FlashlightProbe)11 GeneratorAdapter (org.glassfish.hk2.external.org.objectweb.asm.commons.GeneratorAdapter)3 Method (org.glassfish.hk2.external.org.objectweb.asm.commons.Method)3 ProbeClientInvoker (org.glassfish.flashlight.client.ProbeClientInvoker)2 ClassWriter (org.glassfish.hk2.external.org.objectweb.asm.ClassWriter)2 Type (org.glassfish.hk2.external.org.objectweb.asm.Type)2 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 PrivilegedActionException (java.security.PrivilegedActionException)1 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 ProbeInfo (org.glassfish.api.monitoring.ProbeInfo)1 ProbeListener (org.glassfish.external.probe.provider.annotations.ProbeListener)1 ProbeRegistry (org.glassfish.flashlight.provider.ProbeRegistry)1 AnnotationVisitor (org.glassfish.hk2.external.org.objectweb.asm.AnnotationVisitor)1 Label (org.glassfish.hk2.external.org.objectweb.asm.Label)1