Changeset c6d83bbfb23e3a87bbd661cc601af89380951a49

Show
Ignore:
Timestamp:
09/06/11 21:29:58 (3 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1315344598 -0400
git-parent:

[b1133af9f85966fc31d2bee8a38cb7a8561807fe], [049b332a85e8942742b92f21d6b7653574cfb54f]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1315344598 -0400
Message:

Merge remote-tracking branch 'github/jmx'

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/java/com/omniti/jezebel/check/jmx.java

    rb553f9a r049b332  
    3939import java.util.Arrays; 
    4040import java.util.ArrayList; 
    41 import java.util.regex.Pattern
    42 import java.util.regex.Matcher; 
     41import java.util.List
     42import java.util.Iterator; 
    4343 
    4444import javax.management.MBeanServerConnection; 
     
    5050import javax.management.remote.JMXConnectorFactory; 
    5151import javax.management.remote.JMXServiceURL; 
     52import javax.management.AttributeList; 
     53import javax.management.Attribute; 
     54import javax.management.openmbean.CompositeData; 
     55import javax.management.openmbean.CompositeDataSupport; 
     56import javax.management.openmbean.CompositeType; 
     57import javax.management.openmbean.OpenType; 
     58import javax.management.openmbean.SimpleType; 
     59import javax.management.openmbean.TabularDataSupport; 
     60import java.lang.management.MemoryUsage; 
    5261 
    5362import com.omniti.jezebel.ResmonResult; 
     
    8897            } 
    8998 
    90             Pattern space = Pattern.compile("\\s"); 
    91              
    9299            for (ObjectName objectName : allObjectNames) { 
    93100                if ( ! domains.isEmpty() && ! domains.contains(objectName.getDomain()) ) { 
     
    97104                MBeanInfo mbi = mbsc.getMBeanInfo(objectName); 
    98105                MBeanAttributeInfo[] attribs = mbi.getAttributes(); 
    99                 String oname = ""; 
    100  
    101                 Hashtable<String,String> objectPropList = objectName.getKeyPropertyList(); 
    102                 if ( objectPropList.containsKey("name") ) { 
    103                     oname += objectPropList.get("name"); 
    104                 } 
    105                 if ( objectPropList.containsKey("type") ) { 
    106                     if ( ! oname.equals("") ) { 
    107                         oname += "`"; 
    108                     } 
    109                     oname += objectPropList.get("type"); 
    110                 } 
    111  
    112                 Matcher m = space.matcher(oname); 
    113                 oname = m.replaceAll("_"); 
    114  
    115                 for (MBeanAttributeInfo attr : attribs) 
    116                 { 
    117                     try { 
    118                         String mname = attr.getName(); 
    119                         Matcher m2 = space.matcher(mname); 
    120                         mname = m2.replaceAll("_"); 
    121  
    122                         if ( attr.getType().equals("java.lang.String") ) { 
    123                             String val = (String)mbsc.getAttribute(objectName, attr.getName()); 
    124                             if ( val.length() <= 256 ) { 
    125                                 rr.set(oname + "`" + mname, val); 
    126                             } 
    127                         } 
    128                         else if ( attr.getType().equals("int") ) { 
    129                             rr.set(oname + "`" + mname, (Integer)mbsc.getAttribute(objectName, attr.getName())); 
    130                         } 
    131                         else if ( attr.getType().equals("long") ) { 
    132                             rr.set(oname + "`" + mname, (Long)mbsc.getAttribute(objectName, attr.getName())); 
    133                         } 
    134                         else if ( attr.getType().equals("boolean") ) { 
    135                             Boolean val = (Boolean)mbsc.getAttribute(objectName, attr.getName()); 
    136                             rr.set(oname + "`" + mname, (val)?1:0); 
    137                         } 
    138                     } 
    139                     catch (Exception e) {} 
     106                String oname = objectName.getDomain() + ":" + objectName.getCanonicalKeyPropertyListString(); 
     107 
     108                String[] attributes = new String[attribs.length]; 
     109                int i = 0; 
     110                for (MBeanAttributeInfo attr : attribs) { 
     111                    attributes[i] = attr.getName(); 
     112                    ++i; 
     113                } 
     114 
     115                AttributeList al = mbsc.getAttributes(objectName, attributes); 
     116                List<Attribute> aal = al.asList(); 
     117 
     118                for (Attribute a : aal ) { 
     119                    getMetric(oname, a.getName(), a.getValue(), rr); 
    140120                } 
    141121            } 
     
    147127        } 
    148128    } 
     129 
     130    private void getMetric (String objectName, String metricName, Object value, ResmonResult rr) { 
     131        try { 
     132            if ( value == null ) return; 
     133 
     134            if ( value instanceof String ) { 
     135                String val = (String)value; 
     136                if ( val != null && val.length() <= 256 ) { 
     137                    rr.set(objectName + "`" + metricName, val); 
     138                } 
     139            } 
     140            else if ( value instanceof Integer ) { 
     141                rr.set(objectName + "`" + metricName, (Integer)value); 
     142            } 
     143            else if ( value instanceof Long ) { 
     144                rr.set(objectName + "`" + metricName, (Long)value); 
     145            } 
     146            else if ( value instanceof Boolean ) { 
     147                Boolean val = (Boolean)value; 
     148                rr.set(objectName + "`" + metricName, (val)?1:0); 
     149            } 
     150            else if ( value instanceof Double ) { 
     151                rr.set(objectName + "`" + metricName, (Double)value); 
     152            } 
     153            else if ( value instanceof Float ) { 
     154                rr.set(objectName + "`" + metricName, (Float)value); 
     155            } 
     156            else if ( value instanceof CompositeDataSupport ) { 
     157                CompositeDataSupport data = (CompositeDataSupport)value; 
     158                CompositeType type = data.getCompositeType(); 
     159                Set keys = type.keySet(); 
     160                for ( Iterator it = keys.iterator(); it.hasNext(); ) { 
     161                    String key = (String)it.next(); 
     162                    getMetric(objectName, metricName + "`" + key, data.get(key), rr); 
     163                } 
     164            } 
     165            else if ( value instanceof TabularDataSupport ) { 
     166                TabularDataSupport data = (TabularDataSupport)value; 
     167                Set keys = data.keySet(); 
     168                for ( Iterator it = keys.iterator(); it.hasNext(); ) { 
     169                    Object key = it.next(); 
     170                    for ( Iterator ki = ((List) key).iterator(); ki.hasNext(); ) { 
     171                        Object key2 = ki.next(); 
     172                        CompositeData cd = data.get(new Object[] {key2}); 
     173                        getMetric(objectName, metricName + "`" + key2, cd.get("value"), rr); 
     174                    } 
     175                } 
     176            } 
     177            else if ( value.getClass().isArray() ) { 
     178                String t = value.getClass().getName().substring(1,2); 
     179                if ( t.equals("L") ) { 
     180                    Object[] vals = (Object[])value; 
     181                    for ( int i = 0, len = vals.length; i < len; ++i ) { 
     182                        getMetric(objectName, metricName + "`" + i, vals[i], rr); 
     183                    } 
     184                } 
     185                else { 
     186                    ArrayList<Object> list = new ArrayList<Object>(0); 
     187                    if ( t.equals("Z") ) { 
     188                        boolean[] vals = (boolean[])value; 
     189                        list = new ArrayList<Object>(vals.length); 
     190                        for ( boolean v : vals ) { list.add(v); } 
     191                    } 
     192                    else if ( t.equals("B") ) { 
     193                        byte[] vals = (byte[])value; 
     194                        list = new ArrayList<Object>(vals.length); 
     195                        for ( byte v : vals ) { list.add(v); } 
     196                    } 
     197                    else if ( t.equals("C") ) { 
     198                        char[] vals = (char[])value; 
     199                        list = new ArrayList<Object>(vals.length); 
     200                        for ( char v : vals ) { list.add(v); } 
     201                    } 
     202                    else if ( t.equals("D") ) { 
     203                        double[] vals = (double[])value; 
     204                        list = new ArrayList<Object>(vals.length); 
     205                        for ( double v : vals ) { list.add(v); } 
     206                    } 
     207                    else if ( t.equals("F") ) { 
     208                        float[] vals = (float[])value; 
     209                        list = new ArrayList<Object>(vals.length); 
     210                        for ( float v : vals ) { list.add(v); } 
     211                    } 
     212                    else if ( t.equals("I") ) {  
     213                        int[] vals = (int[])value; 
     214                        list = new ArrayList<Object>(vals.length); 
     215                        for ( int v : vals ) { list.add(v); } 
     216                    } 
     217                    else if ( t.equals("J") ) { 
     218                        long[] vals = (long[])value; 
     219                        list = new ArrayList<Object>(vals.length); 
     220                        for ( long v : vals ) { list.add(v); } 
     221                    } 
     222                    else if ( t.equals("S") ) { 
     223                        short[] vals = (short[])value; 
     224                        list = new ArrayList<Object>(vals.length); 
     225                        for ( short v : vals ) { list.add(v); } 
     226                    } 
     227 
     228                    for ( int i = 0, len = list.size(); i < len; ++i ) { 
     229                        getMetric(objectName, metricName + "`" + i, list.get(i), rr); 
     230                    } 
     231                } 
     232            } 
     233            else { 
     234                System.err.println("Error, could not handle. name: " + objectName+"`"+metricName + " type: " + value.getClass().getName()); 
     235            } 
     236        } 
     237        catch (Exception e) { System.err.println("Exception: " + objectName+"`"+metricName + " " + e.getMessage()); } 
     238    } 
    149239}