Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ install:
before_script:
- curl -L https://raw.github.com/DataDog/dd-agent/master/tests/haproxy.cfg > /tmp/haproxy.cfg
- sudo service haproxy restart
# - curl -L http://mirrors.ibiblio.org/apache/tomcat/tomcat-7/v7.0.34/bin/apache-tomcat-7.0.34.tar.gz | tar -C /tmp -xzf - && mv /tmp/apache-tomcat-7.0.34/ /tmp/apache-tomcat-7 && echo 'export CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8091 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/tmp/apache-tomcat-7/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/tmp/apache-tomcat-7/conf/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false" export CATALINA_OUT="/tmp/apache-tomcat-7/catalina.out"' > /tmp/apache-tomcat-7/bin/setenv.sh && echo 'monitorRole readonly' > /tmp/apache-tomcat-7/conf/jmxremote.access && echo 'monitorRole tomcat' > /tmp/apache-tomcat-7/conf/jmxremote.password && chmod 400 /tmp/apache-tomcat-7/conf/jmxremote.password
# - sudo bash -c "echo 'monitorRole readonly' > /etc/solr/conf/jmxremote.access && chmod 400 /etc/solr/conf/jmxremote.access"
# - sudo bash -c "echo 'monitorRole solr' > /etc/solr/conf/jmxremote.password && chmod 400 /etc/solr/conf/jmxremote.password"
- sudo bash -c "curl -L https://raw.github.com/DataDog/dd-agent/master/tests/tomcat_cfg.xml > /etc/tomcat6/server.xml"
- sudo bash -c "curl -L https://raw.github.com/DataDog/dd-agent/master/tests/tomcat6 >> /etc/default/tomcat6"
- sudo service nginx stop
Expand All @@ -41,9 +38,9 @@ before_script:
- sudo mkdir -p /etc/dd-agent/
- sudo install -d -o "$(id -u)" /var/log/datadog
- sudo bash -c "curl -L https://raw.github.com/DataDog/dd-agent/master/datadog.conf.example > /etc/dd-agent/datadog.conf"
- sudo service tomcat6 restart
- sudo service apache2 start
- sudo service nginx start
- sudo service tomcat6 restart
env:
- DB=redis
script: nosetests -A 'not windows' tests
script: nosetests -A 'not windows' tests
17 changes: 13 additions & 4 deletions checks.d/solr.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,20 @@ def check(self, instance):
if instance_name is not None:
tags['instance'] = instance_name

domains = SOLR_DOMAINS + JAVA_DOMAINS + self.init_config.get('domains', [])
dump = jmx.dump(values_only=False)
user_solr_domain = self.init_config.get('domains', [])

if len(user_solr_domain) > 0:
domains = user_solr_domain + JAVA_DOMAINS
dump = jmx.dump_domains(JAVA_DOMAINS + user_solr_domain, values_only=False)
self.get_and_send_jvm_metrics(instance, dump, tags)
self.create_metrics(instance, self.get_beans(dump, domains, approx=False), SolrMetric, tags=tags)
else:
domains = SOLR_DOMAINS + JAVA_DOMAINS
dump = jmx.dump(values_only=False)
self.get_and_send_jvm_metrics(instance, dump, tags)
self.create_metrics(instance, self.get_beans(dump, domains, approx=True), SolrMetric, tags=tags)


self.get_and_send_jvm_metrics(instance, dump, tags)
self.create_metrics(instance, self.get_beans(dump, domains, approx=True), SolrMetric, tags=tags)
self.send_jmx_metrics()
self.clear_jmx_metrics()

Expand Down
4 changes: 3 additions & 1 deletion checks/jmx_connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,8 @@ def check_conf(self, include_fields={}, exclude_fields={}):
attr = attributes[attr]
if attr.has_key('alias'):
self._metric_name = attr['alias']
if attr.has_key('type'):
self._metric_type = attr['type']
if attr.has_key('metric_type'):
self._metric_type = attr['metric_type']
attributes_ok = True
Expand Down Expand Up @@ -473,7 +475,7 @@ def get_beans(self, dump, domains=None, approx=False):

def in_domains(dom, doms, approx):
if approx:
return len([d for d in doms if dom in d]) > 0
return len([d for d in doms if d in dom]) > 0
else:
return dom in doms

Expand Down
5 changes: 1 addition & 4 deletions conf.d/cassandra.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ init_config:
- TotalWriteLatencyMicros
- UpdateInterval
- WriteCount
- PendingTasks
exclude:
keyspace: system
attribute:
Expand All @@ -56,10 +57,6 @@ init_config:
- CompletedTasks
- CurrentlyBlockedTasks
- TotalBlockedTasks
exclude:
attribute:
- PendingTasks
- Token
- include:
domain: org.apache.cassandra.net
attribute:
Expand Down
156 changes: 156 additions & 0 deletions tests/test_java_jmx.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
import unittest
from checks.jmx_connector import JmxCheck
import logging
import subprocess
import time
import urllib2
from nose.plugins.skip import SkipTest

from tests.common import kill_subprocess, load_check




class JMXTestCase(unittest.TestCase):
def setUp(self):
pass

def tearDown(self):
pass


def testCustomJMXMetric(self):
#raise SkipTest()
agentConfig = {
'version': '0.1',
'api_key': 'toto'
}
config = {}

config['instances'] = [
{
"host": "localhost",
"port": 8090,
"conf":
[
{"include":{
"domain" : "Catalina",
"type": "Connector",
"port": "8009",
"attribute":
{"bufferSize":
{"alias": "my.metric.buf",
"metric_type": "gauge"}
}
}
},
{"include":{
"domain": "Catalina",
"type": "ThreadPool",
"name": "http-8080"
}
},
{"include":{
"domain": "java.lang"
}
}
]
}
]





metrics_check = load_check('jmx', config, agentConfig)

timers_first_check = []

for instance in config['instances']:
start = time.time()
metrics_check.check(instance)
timers_first_check.append(time.time() - start)

metrics = metrics_check.get_metrics()



self.assertTrue(type(metrics) == type([]))
self.assertTrue(len(metrics) > 0)
self.assertEquals(len([t for t in metrics if t[0] == "my.metric.buf"]), 1, metrics)
self.assertTrue(len([t for t in metrics if t[3]['tags'][1] == 'type:ThreadPool' and "jmx.catalina" in t[0]]) > 8, metrics)
self.assertTrue(len([t for t in metrics if "jmx.java.lang" in t[0]]) > 50, metrics)
self.assertTrue(len([t for t in metrics if "jvm." in t[0]]) > 4, metrics)


timers_second_check = []
for instance in config['instances']:
try:
start = time.time()
metrics_check.check(instance)
timers_second_check.append(time.time() - start)
except Exception,e:
print e
continue

metrics_check.kill_jmx_connectors()


self.assertEquals(len([t for t in timers_first_check if t > 10]), 0, timers_first_check)
self.assertEquals(len([t for t in timers_second_check if t > 2]), 0, timers_second_check)


time.sleep(2)




def testJavaMetric(self):
agentConfig = {
'java_jmx_instance_1': 'localhost:8090',
'java_jmx_instance_2': 'dummyhost:9999:dummy',
'version': '0.1',
'api_key': 'toto'
}

config = JmxCheck.parse_agent_config(agentConfig, 'java')

metrics_check = load_check('jmx', config, agentConfig)


timers_first_check = []

for instance in config['instances']:
try:
start = time.time()
metrics_check.check(instance)
timers_first_check.append(time.time() - start)
except Exception,e:
print e
continue

metrics = metrics_check.get_metrics()

self.assertTrue(type(metrics) == type([]))
self.assertTrue(len(metrics) > 0)
self.assertEquals(len([t for t in metrics if t[0] == "jvm.thread_count"]), 1, metrics)
self.assertTrue(len([t for t in metrics if "jvm." in t[0]]) > 4, [t for t in metrics if "jvm." in t[0]])

timers_second_check = []
for instance in config['instances']:
try:
start = time.time()
metrics_check.check(instance)
timers_second_check.append(time.time() - start)
except Exception,e:
print e
continue
metrics_check.kill_jmx_connectors()

self.assertEquals(len([t for t in timers_first_check if t > 10]), 0, timers_first_check)
self.assertEquals(len([t for t in timers_second_check if t > 2]), 0, timers_second_check)



if __name__ == "__main__":
unittest.main()
Loading