/
datasender.py
81 lines (69 loc) · 2.36 KB
/
datasender.py
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
from multiprocessing import Process, Manager
from multiprocessing.managers import SyncManager
import time
import signal
import json
import urllib
import urllib2
class DataSender:
def __init__(self,phantfile):
try:
self.phant = json.load(open(phantfile, 'r'))
except IOError:
raise ValueError("Invalid phantfile location")
self.running = True
self._manager = SyncManager()
def start(self):
self._manager.start(self._mgr_init)
self._que = self._manager.Queue()
self._process = Process(target=self.up, args=(self._que,))
self._process.start()
def _mgr_init(self):
signal.signal(signal.SIGINT, signal.SIG_IGN)
print("initialized manager")
def up(self,que):
def stop(val,val2):
print "process SIGINT stopping"
self.running = False
signal.signal(signal.SIGINT, stop)
print('datauploader started')
while self.running or not que.empty():
item = json.loads(que.get(True))
print("handling item={0}".format(item))
self.httpsend(item)
que.task_done()
time.sleep(2)
print("datauploader process terminating...")
def send(self, data):
self._que.put(data)
def httpsend(self, data):
postdata = urllib.urlencode(data)
headers = {'Phant-Private-Key': self.phant['privateKey'] }
req = urllib2.Request(self.phant['inputUrl'], postdata, headers)
res = urllib2.urlopen(req)
content = res.read()
print("response: {0}".format(content))
def stop(self):
print("shutting down sender")
self.running = False
self._que.join()
self._process.terminate()
if __name__ == '__main__':
sender = DataSender('phant.json')
sender.start()
val = 0
sample = {'node_id': 'TEST', 'data_type': 'float', 'value': val}
try:
while val < 30:
val = val+1
sample['value'] = val
in_json = json.dumps(sample)
print("adding new item to que={0}".format(in_json))
sender.send(in_json)
if val % 2 == 0:
print("main thread will sleep now for 2 seconds")
time.sleep(2)
except KeyboardInterrupt:
print("keyboard interrupt")
sender.stop()
sender.stop()