Search in sources :

Example 1 with GaugeMonitor

use of javax.management.monitor.GaugeMonitor in project jdk8u_jdk by JetBrains.

the class AttributeArbitraryDataTypeTest method gaugeMonitorNotification.

/**
     * Update the gauge and check for notifications
     */
public int gaugeMonitorNotification(int testCase) throws Exception {
    gaugeMessageReceived = false;
    GaugeMonitor gaugeMonitor = null;
    try {
        MBeanServer server = MBeanServerFactory.newMBeanServer();
        String domain = server.getDefaultDomain();
        // Create a new GaugeMonitor MBean and add it to the MBeanServer.
        //
        echo(">>> CREATE a new GaugeMonitor MBean");
        ObjectName gaugeMonitorName = new ObjectName(domain + ":type=" + GaugeMonitor.class.getName());
        gaugeMonitor = new GaugeMonitor();
        server.registerMBean(gaugeMonitor, gaugeMonitorName);
        echo(">>> ADD a listener to the GaugeMonitor");
        gaugeMonitor.addNotificationListener(this, null, null);
        //
        // MANAGEMENT OF A STANDARD MBEAN
        //
        echo(">>> CREATE a new ObservedObject MBean");
        ObjectName obsObjName = ObjectName.getInstance(domain + ":type=ObservedObject");
        ObservedObject obsObj = new ObservedObject();
        ComplexAttribute ca = new ComplexAttribute();
        switch(testCase) {
            case 1:
                obsObj.da = 0.0;
                break;
            case 2:
                ca.setDoubleAttribute(0.0);
                obsObj.setComplexAttribute(ca);
                break;
            case 3:
                ca.setArrayAttribute(new Integer[0]);
                obsObj.setComplexAttribute(ca);
                break;
        }
        server.registerMBean(obsObj, obsObjName);
        echo(">>> SET the attributes of the GaugeMonitor:");
        gaugeMonitor.addObservedObject(obsObjName);
        echo("\tATTRIBUTE \"ObservedObject\"    = " + obsObjName);
        switch(testCase) {
            case 1:
                gaugeMonitor.setObservedAttribute("CompositeDataAttribute.DoubleAttribute");
                echo("\tATTRIBUTE \"ObservedAttribute\" = " + "CompositeDataAttribute.DoubleAttribute");
                break;
            case 2:
                gaugeMonitor.setObservedAttribute("ComplexAttribute.doubleAttribute");
                echo("\tATTRIBUTE \"ObservedAttribute\" = " + "ComplexAttribute.doubleAttribute");
                break;
            case 3:
                gaugeMonitor.setObservedAttribute("ComplexAttribute.arrayAttribute.length");
                echo("\tATTRIBUTE \"ObservedAttribute\" = " + "ComplexAttribute.arrayAttribute.length");
                break;
        }
        gaugeMonitor.setNotifyLow(false);
        gaugeMonitor.setNotifyHigh(true);
        echo("\tATTRIBUTE \"Notify Low  Flag\"  = false");
        echo("\tATTRIBUTE \"Notify High Flag\"  = true");
        switch(testCase) {
            case 1:
            case 2:
                Double highThresholdD = 3.0, lowThresholdD = 2.5;
                gaugeMonitor.setThresholds(highThresholdD, lowThresholdD);
                echo("\tATTRIBUTE \"Low  Threshold\"    = " + lowThresholdD);
                echo("\tATTRIBUTE \"High Threshold\"    = " + highThresholdD);
                break;
            case 3:
                Integer highThreshold = 2, lowThreshold = 1;
                gaugeMonitor.setThresholds(highThreshold, lowThreshold);
                echo("\tATTRIBUTE \"Low  Threshold\"    = " + lowThreshold);
                echo("\tATTRIBUTE \"High Threshold\"    = " + highThreshold);
                break;
        }
        int granularityperiod = 500;
        gaugeMonitor.setGranularityPeriod(granularityperiod);
        echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
        echo(">>> START the GaugeMonitor");
        gaugeMonitor.start();
        // Wait for granularity period (multiplied by 2 for sure)
        //
        Thread.sleep(granularityperiod * 2);
        switch(testCase) {
            case 1:
                obsObj.da = 2.0;
                break;
            case 2:
                ca.setDoubleAttribute(2.0);
                break;
            case 3:
                ca.setArrayAttribute(new Integer[2]);
                break;
        }
        // Wait for granularity period (multiplied by 2 for sure)
        //
        Thread.sleep(granularityperiod * 2);
        switch(testCase) {
            case 1:
                obsObj.da = 4.0;
                break;
            case 2:
                ca.setDoubleAttribute(4.0);
                break;
            case 3:
                ca.setArrayAttribute(new Integer[4]);
                break;
        }
        // Wait for granularity period (multiplied by 2 for sure)
        //
        Thread.sleep(granularityperiod * 2);
        switch(testCase) {
            case 1:
                obsObj.da = 6.0;
                break;
            case 2:
                ca.setDoubleAttribute(6.0);
                break;
            case 3:
                ca.setArrayAttribute(new Integer[6]);
                break;
        }
        //
        synchronized (this) {
            while (!gaugeMessageReceived) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    System.err.println("Got unexpected exception: " + e);
                    e.printStackTrace();
                    break;
                }
            }
        }
        if (gaugeMessageReceived) {
            echo("\tOK: GaugeMonitor notification received");
        } else {
            echo("\tKO: GaugeMonitor notification missed or not emitted");
            return 1;
        }
    } finally {
        if (gaugeMonitor != null)
            gaugeMonitor.stop();
    }
    return 0;
}
Also used : GaugeMonitor(javax.management.monitor.GaugeMonitor) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName)

Example 2 with GaugeMonitor

use of javax.management.monitor.GaugeMonitor in project jdk8u_jdk by JetBrains.

the class ThreadPoolAccTest method main.

public static void main(String[] args) throws Exception {
    ObjectName[] mbeanNames = new ObjectName[6];
    ObservedObject[] monitored = new ObservedObject[6];
    ObjectName[] monitorNames = new ObjectName[6];
    Monitor[] monitor = new Monitor[6];
    String[] principals = { "role1", "role2" };
    String[] attributes = { "Integer", "Double", "String" };
    try {
        echo(">>> CREATE MBeanServer");
        MBeanServer server = MBeanServerFactory.newMBeanServer();
        for (int i = 0; i < 6; i++) {
            mbeanNames[i] = new ObjectName(":type=ObservedObject,instance=" + i);
            monitored[i] = new ObservedObject();
            echo(">>> CREATE ObservedObject = " + mbeanNames[i].toString());
            server.registerMBean(monitored[i], mbeanNames[i]);
            switch(i) {
                case 0:
                case 3:
                    monitorNames[i] = new ObjectName(":type=CounterMonitor,instance=" + i);
                    monitor[i] = new CounterMonitor();
                    break;
                case 1:
                case 4:
                    monitorNames[i] = new ObjectName(":type=GaugeMonitor,instance=" + i);
                    monitor[i] = new GaugeMonitor();
                    break;
                case 2:
                case 5:
                    monitorNames[i] = new ObjectName(":type=StringMonitor,instance=" + i);
                    monitor[i] = new StringMonitor();
                    break;
            }
            echo(">>> CREATE Monitor = " + monitorNames[i].toString());
            server.registerMBean(monitor[i], monitorNames[i]);
            monitor[i].addObservedObject(mbeanNames[i]);
            monitor[i].setObservedAttribute(attributes[i % 3]);
            monitor[i].setGranularityPeriod(500);
            final Monitor m = monitor[i];
            Subject subject = new Subject();
            echo(">>> RUN Principal = " + principals[i / 3]);
            subject.getPrincipals().add(new JMXPrincipal(principals[i / 3]));
            PrivilegedAction<Void> action = new PrivilegedAction<Void>() {

                public Void run() {
                    m.start();
                    return null;
                }
            };
            Subject.doAs(subject, action);
        }
        while (!testPrincipals(monitored, monitorNames, monitor, principals)) ;
    } finally {
        for (int i = 0; i < 6; i++) if (monitor[i] != null)
            monitor[i].stop();
    }
}
Also used : GaugeMonitor(javax.management.monitor.GaugeMonitor) JMXPrincipal(javax.management.remote.JMXPrincipal) Subject(javax.security.auth.Subject) ObjectName(javax.management.ObjectName) StringMonitor(javax.management.monitor.StringMonitor) StringMonitor(javax.management.monitor.StringMonitor) CounterMonitor(javax.management.monitor.CounterMonitor) Monitor(javax.management.monitor.Monitor) GaugeMonitor(javax.management.monitor.GaugeMonitor) PrivilegedAction(java.security.PrivilegedAction) CounterMonitor(javax.management.monitor.CounterMonitor) MBeanServer(javax.management.MBeanServer)

Example 3 with GaugeMonitor

use of javax.management.monitor.GaugeMonitor in project camel by apache.

the class JMXMonitorConsumer method addNotificationListener.

@Override
protected void addNotificationListener() throws Exception {
    JMXEndpoint ep = (JMXEndpoint) getEndpoint();
    // create the monitor bean
    Monitor bean = null;
    if (ep.getMonitorType().equals("counter")) {
        CounterMonitor counter = new CounterMonitor();
        Number initThreshold = convertNumberToAttributeType(ep.getInitThreshold(), ep.getJMXObjectName(), ep.getObservedAttribute());
        Number offset = convertNumberToAttributeType(ep.getOffset(), ep.getJMXObjectName(), ep.getObservedAttribute());
        Number modulus = convertNumberToAttributeType(ep.getModulus(), ep.getJMXObjectName(), ep.getObservedAttribute());
        counter.setInitThreshold(initThreshold);
        counter.setOffset(offset);
        counter.setModulus(modulus);
        counter.setDifferenceMode(ep.isDifferenceMode());
        counter.setNotify(true);
        bean = counter;
    } else if (ep.getMonitorType().equals("gauge")) {
        GaugeMonitor gm = new GaugeMonitor();
        gm.setNotifyHigh(ep.isNotifyHigh());
        gm.setNotifyLow(ep.isNotifyLow());
        gm.setDifferenceMode(ep.isDifferenceMode());
        Number highValue = convertNumberToAttributeType(ep.getThresholdHigh(), ep.getJMXObjectName(), ep.getObservedAttribute());
        Number lowValue = convertNumberToAttributeType(ep.getThresholdLow(), ep.getJMXObjectName(), ep.getObservedAttribute());
        gm.setThresholds(highValue, lowValue);
        bean = gm;
    } else if (ep.getMonitorType().equals("string")) {
        StringMonitor sm = new StringMonitor();
        sm.setNotifyDiffer(ep.isNotifyDiffer());
        sm.setNotifyMatch(ep.isNotifyMatch());
        sm.setStringToCompare(ep.getStringToCompare());
        bean = sm;
    }
    bean.addObservedObject(ep.getJMXObjectName());
    bean.setObservedAttribute(ep.getObservedAttribute());
    bean.setGranularityPeriod(ep.getGranularityPeriod());
    // register the bean
    mMonitorObjectName = new ObjectName(ep.getObjectDomain(), "name", "camel-jmx-monitor-" + UUID.randomUUID());
    ManagementFactory.getPlatformMBeanServer().registerMBean(bean, mMonitorObjectName);
    // add ourselves as a listener to it
    NotificationFilter nf = ep.getNotificationFilter();
    getServerConnection().addNotificationListener(mMonitorObjectName, this, nf, bean);
    bean.start();
}
Also used : StringMonitor(javax.management.monitor.StringMonitor) StringMonitor(javax.management.monitor.StringMonitor) CounterMonitor(javax.management.monitor.CounterMonitor) Monitor(javax.management.monitor.Monitor) GaugeMonitor(javax.management.monitor.GaugeMonitor) GaugeMonitor(javax.management.monitor.GaugeMonitor) CounterMonitor(javax.management.monitor.CounterMonitor) NotificationFilter(javax.management.NotificationFilter) ObjectName(javax.management.ObjectName)

Example 4 with GaugeMonitor

use of javax.management.monitor.GaugeMonitor in project jdk8u_jdk by JetBrains.

the class ThreadPoolTest method runTest.

/**
     * Run test
     */
public int runTest(int monitorType) throws Exception {
    ObjectName[] mbeanNames = new ObjectName[nTasks];
    ObservedObject[] monitored = new ObservedObject[nTasks];
    ObjectName[] monitorNames = new ObjectName[nTasks];
    Monitor[] monitor = new Monitor[nTasks];
    String[] attributes = { "Integer", "Double", "String" };
    try {
        echo(">>> CREATE MBeanServer");
        MBeanServer server = MBeanServerFactory.newMBeanServer();
        String domain = server.getDefaultDomain();
        for (int i = 0; i < nTasks; i++) {
            mbeanNames[i] = new ObjectName(":type=ObservedObject,instance=" + (i + 1));
            monitored[i] = new ObservedObject();
            echo(">>> CREATE ObservedObject = " + mbeanNames[i].toString());
            server.registerMBean(monitored[i], mbeanNames[i]);
            switch(monitorType) {
                case 1:
                    monitorNames[i] = new ObjectName(":type=CounterMonitor," + "instance=" + (i + 1));
                    monitor[i] = new CounterMonitor();
                    break;
                case 2:
                    monitorNames[i] = new ObjectName(":type=GaugeMonitor," + "instance=" + (i + 1));
                    monitor[i] = new GaugeMonitor();
                    break;
                case 3:
                    monitorNames[i] = new ObjectName(":type=StringMonitor," + "instance=" + (i + 1));
                    monitor[i] = new StringMonitor();
                    break;
                default:
                    echo("Unsupported monitor type");
                    return 1;
            }
            echo(">>> CREATE Monitor = " + monitorNames[i].toString());
            server.registerMBean(monitor[i], monitorNames[i]);
            monitor[i].addObservedObject(mbeanNames[i]);
            monitor[i].setObservedAttribute(attributes[monitorType - 1]);
            monitor[i].setGranularityPeriod(50);
            monitor[i].start();
        }
        if (!waiter.waiting(MAX_WAITING_TIME)) {
            echo("Error, not all " + nTasks + " monitor tasks are called after " + MAX_WAITING_TIME);
            return 1;
        }
    } finally {
        for (int i = 0; i < nTasks; i++) if (monitor[i] != null)
            monitor[i].stop();
    }
    echo("All " + nTasks + " monitors are called.");
    return 0;
}
Also used : GaugeMonitor(javax.management.monitor.GaugeMonitor) ObjectName(javax.management.ObjectName) StringMonitor(javax.management.monitor.StringMonitor) StringMonitor(javax.management.monitor.StringMonitor) CounterMonitor(javax.management.monitor.CounterMonitor) Monitor(javax.management.monitor.Monitor) GaugeMonitor(javax.management.monitor.GaugeMonitor) CounterMonitor(javax.management.monitor.CounterMonitor) MBeanServer(javax.management.MBeanServer)

Example 5 with GaugeMonitor

use of javax.management.monitor.GaugeMonitor in project jdk8u_jdk by JetBrains.

the class ReflectionExceptionTest method gaugeMonitorNotification.

/**
     * Update the gauge and check for notifications
     */
public int gaugeMonitorNotification() throws Exception {
    GaugeMonitor gaugeMonitor = new GaugeMonitor();
    try {
        // Create a new GaugeMonitor MBean and add it to the MBeanServer.
        //
        echo(">>> CREATE a new GaugeMonitor MBean");
        ObjectName gaugeMonitorName = new ObjectName(domain + ":type=" + GaugeMonitor.class.getName());
        server.registerMBean(gaugeMonitor, gaugeMonitorName);
        echo(">>> ADD a listener to the GaugeMonitor");
        gaugeMonitor.addNotificationListener(this, null, null);
        //
        // MANAGEMENT OF A STANDARD MBEAN
        //
        echo(">>> SET the attributes of the GaugeMonitor:");
        gaugeMonitor.addObservedObject(obsObjName);
        echo("\tATTRIBUTE \"ObservedObject\"    = " + obsObjName);
        gaugeMonitor.setObservedAttribute("IntegerAttribute");
        echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
        gaugeMonitor.setNotifyLow(false);
        gaugeMonitor.setNotifyHigh(false);
        echo("\tATTRIBUTE \"Notify Low  Flag\"  = false");
        echo("\tATTRIBUTE \"Notify High Flag\"  = false");
        Integer highThreshold = 3, lowThreshold = 2;
        gaugeMonitor.setThresholds(highThreshold, lowThreshold);
        echo("\tATTRIBUTE \"Low  Threshold\"    = " + lowThreshold);
        echo("\tATTRIBUTE \"High Threshold\"    = " + highThreshold);
        int granularityperiod = 500;
        gaugeMonitor.setGranularityPeriod(granularityperiod);
        echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
        echo(">>> START the GaugeMonitor");
        gaugeMonitor.start();
        // Check if notification was received
        //
        doWait();
        if (messageReceived) {
            echo("\tOK: GaugeMonitor got RUNTIME_ERROR notification!");
        } else {
            echo("\tKO: GaugeMonitor did not get " + "RUNTIME_ERROR notification!");
            return 1;
        }
    } finally {
        messageReceived = false;
        if (gaugeMonitor != null)
            gaugeMonitor.stop();
    }
    return 0;
}
Also used : GaugeMonitor(javax.management.monitor.GaugeMonitor) ObjectName(javax.management.ObjectName)

Aggregations

ObjectName (javax.management.ObjectName)8 GaugeMonitor (javax.management.monitor.GaugeMonitor)8 MBeanServer (javax.management.MBeanServer)5 CounterMonitor (javax.management.monitor.CounterMonitor)5 Monitor (javax.management.monitor.Monitor)4 StringMonitor (javax.management.monitor.StringMonitor)4 PrivilegedAction (java.security.PrivilegedAction)1 NotificationFilter (javax.management.NotificationFilter)1 JMXPrincipal (javax.management.remote.JMXPrincipal)1 Subject (javax.security.auth.Subject)1