Repository navigation
Expand file tree
/
Copy pathapp.py
More file actions
125 lines (109 loc) · 3.18 KB
/
Copy pathapp.py
File metadata and controls
125 lines (109 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from influxdb import InfluxDBClient
import requests
import time
import datetime
import math
import pprint
import os
import signal
import sys
client = None
dbname = 'mydb'
measurement = 'sinwave'
def db_exists():
'''returns True if the database exists'''
dbs = client.get_list_database()
for db in dbs:
if db['name'] == dbname:
return True
return False
def wait_for_server(host, port, nretries=5):
'''wait for the server to come online for waiting_time, nretries times.'''
url = 'http://{}:{}'.format(host, port)
waiting_time = 1
for i in range(nretries):
try:
requests.get(url)
return
except requests.exceptions.ConnectionError:
print('waiting for', url)
time.sleep(waiting_time)
waiting_time *= 2
pass
print('cannot connect to', url)
sys.exit(1)
def connect_db(host, port, reset):
'''connect to the database, and create it if it does not exist'''
global client
print('connecting to database: {}:{}'.format(host,port))
client = InfluxDBClient(host, port, retries=5, timeout=1)
wait_for_server(host, port)
create = False
if not db_exists():
create = True
print('creating database...')
client.create_database(dbname)
else:
print('database already exists')
client.switch_database(dbname)
if not create and reset:
client.delete_series(measurement=measurement)
def measure(nmeas):
'''insert dummy measurements to the db.
nmeas = 0 means : insert measurements forever.
'''
i = 0
if nmeas==0:
nmeas = sys.maxsize
for i in range(nmeas):
x = i/10.
y = math.sin(x)
data = [{
'measurement':measurement,
'time':datetime.datetime.now(),
'tags': {
'x' : x
},
'fields' : {
'y' : y
},
}]
client.write_points(data)
pprint.pprint(data)
time.sleep(1)
def get_entries():
'''returns all entries in the database.'''
results = client.query('select * from {}'.format(measurement))
# we decide not to use the x tag
return list(results[(measurement, None)])
if __name__ == '__main__':
import sys
from optparse import OptionParser
parser = OptionParser('%prog [OPTIONS] <host> <port>')
parser.add_option(
'-r', '--reset', dest='reset',
help='reset database',
default=False,
action='store_true'
)
parser.add_option(
'-n', '--nmeasurements', dest='nmeasurements',
type='int',
help='reset database',
default=0
)
options, args = parser.parse_args()
if len(args)!=2:
parser.print_usage()
print('please specify two arguments')
sys.exit(1)
host, port = args
connect_db(host, port, options.reset)
def signal_handler(sig, frame):
print()
print('stopping')
pprint.pprint(get_entries())
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
measure(options.nmeasurements)
pprint.pprint(get_entries())