def test_all_good(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=True, client_base_class=FakeClient) self.assertEqual('Success', cluster.query('')) self.assertEqual(3, len(cluster.hosts)) self.assertEqual(0, len(cluster.bad_hosts))
def test_two_servers_fail(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=False, client_base_class=FakeClient) self.assertEqual('Success', cluster.query('Fail twice')) self.assertEqual(1, len(cluster.hosts)) self.assertEqual(2, len(cluster.bad_hosts))
def test_all_fail(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=True, client_base_class=FakeClient) with self.assertRaises(InfluxDBServerError): cluster.query('Fail') self.assertEqual(0, len(cluster.hosts)) self.assertEqual(3, len(cluster.bad_hosts))
def test_one_server_fails(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=False, client_base_class=FakeClient) cluster.clients[0].fail = True self.assertEqual('Success', cluster.query('')) self.assertEqual(2, len(cluster.clients)) self.assertEqual(1, len(cluster.bad_clients))
def test_recovery(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=True, client_base_class=FakeClient) with self.assertRaises(InfluxDBServerError): cluster.query('Fail') self.assertEqual('Success', cluster.query('')) self.assertEqual(1, len(cluster.hosts)) self.assertEqual(2, len(cluster.bad_hosts))
def test_init(self): cluster = InfluxDBClusterClient(hosts=self.hosts, username='******', password='******', database='database', shuffle=False, client_base_class=FakeClient) self.assertEqual(3, len(cluster.hosts)) self.assertEqual(0, len(cluster.bad_hosts)) self.assertIn((cluster._client._host, cluster._client._port), cluster.hosts)
def test_init(self): cluster = InfluxDBClusterClient(hosts=self.hosts, username='******', password='******', database='database', shuffle=False, client_base_class=FakeClient) self.assertEqual(3, len(cluster.clients)) self.assertEqual(0, len(cluster.bad_clients)) for idx, client in enumerate(cluster.clients): self.assertEqual(self.hosts[idx][0], client._host) self.assertEqual(self.hosts[idx][1], client._port)
def __init__(self, cfg): influxdb.__init__(self, cfg) if 'influxdb_extra_tags' in cfg: self.influxdb_extra_tags = ast.literal_eval( cfg['influxdb_extra_tags']) print self.influxdb_extra_tags else: self.influxdb_extra_tags = {} hosts = map(lambda x: (x.split(':')[0], x.split(':')[1]), self.influxdb_servers) self.client = InfluxDBClusterClient(hosts, self.influxdb_user, self.influxdb_password, timeout=self.timeout)
def test_healing(self): cluster = InfluxDBClusterClient(hosts=self.hosts, database='database', shuffle=True, healing_delay=1, client_base_class=FakeClient) with self.assertRaises(InfluxDBServerError): cluster.query('Fail') self.assertEqual('Success', cluster.query('')) time.sleep(1.1) self.assertEqual('Success', cluster.query('')) self.assertEqual(2, len(cluster.hosts)) self.assertEqual(1, len(cluster.bad_hosts)) time.sleep(1.1) self.assertEqual('Success', cluster.query('')) self.assertEqual(3, len(cluster.hosts)) self.assertEqual(0, len(cluster.bad_hosts))
def open(self): """ Connect to InfluxDB cluster. """ try: self.cc = InfluxDBClusterClient( hosts=self.hosts, username=self.influxdb_user, password=self.influxdb_passwd, ssl=self.influxdb_ssl, verify_ssl=self.influxdb_verify_ssl) self.is_connected = CONNECTED except InfluxDBClientError as e: logging.warning("Connection failed: %s" % e) return False return True
def init_influxdb_client(): global db if not cfg['influxdb']['cluster']: try: from influxdb import InfluxDBClient except ImportError as e: log.exception("Could not import influxdb module: {0}".format(e)) sys.exit(1) db = InfluxDBClient(host=cfg['influxdb']['host'], port=cfg['influxdb']['port'], username=cfg['influxdb']['username'], password=cfg['influxdb']['password'], database=cfg['influxdb']['database'], ssl=cfg['influxdb']['ssl'], verify_ssl=cfg['influxdb']['verify_ssl'], timeout=float(cfg['influxdb']['timeout']), use_udp=cfg['influxdb']['use_udp'], udp_port=cfg['influxdb']['udp_port'], proxies=cfg['influxdb']['proxies']) else: try: from influxdb import InfluxDBClusterClient except ImportError as e: log.exception("Could not import influxdb module: {0}".format(e)) db = InfluxDBClusterClient( hosts=cfg['influxdb']['hosts'], username=cfg['influxdb']['username'], password=cfg['influxdb']['password'], database=cfg['influxdb']['database'], ssl=cfg['influxdb']['ssl'], verify_ssl=cfg['influxdb']['verify_ssl'], timeout=float(cfg['influxdb']['timeout']), use_udp=cfg['influxdb']['use_udp'], udp_port=cfg['influxdb']['udp_port'], shuffle=cfg['influxdb']['shuffle'], healing_delay=cfg['influxdb']['healing_delay'])
#!/usr/bin/env python from influxdb import InfluxDBClusterClient influx_host = "127.0.0.1" influx_port = 8086 influx_user = "******" influx_pass = "******" database = "example" influx_timeout = 10 c.influx_max_metrics = 40 c.influx = InfluxDBClusterClient([(influx_host, influx_port)], influx_user, influx_pass, database, timeout=influx_timeout) query = c.influx.query("SHOW FIELD KEYS") values = [] for key, items in query.items(): for i in list(items): values.append(i["fieldKey"]) # String of all mean(values) # Set makes a uniq list cq_values = ",".join(map(lambda v: 'mean("%s") AS "%s"' % (v, v), set(values))) cq_query = 'CREATE CONTINUOUS QUERY {cq_name} ON {database} BEGIN SELECT {cq_values} INTO {database}."rp_{rp}".:MEASUREMENT FROM {database}."{query}"./.*/ GROUP BY time({rp}), * END'