threads and queues

This commit is contained in:
hg
2015-06-09 22:09:28 +02:00
parent ea0c98b4c5
commit d851a9f5dc
4 changed files with 146 additions and 61 deletions

View File

@ -4,33 +4,62 @@ Created on 20.05.2015
@author: wn
'''
import paho.mqtt.client as mqtt
import json
import pymongo
import datetime
from MqttReceiver import MqttReceiver
from MongoWriter import MongoWriter
import Queue
import os
import sys
from logger import Logger
import time
def on_message(client, userdata, msg):
j = json.loads(msg.payload)
now = datetime.datetime.now()
midnight = now.replace(now.year, now.month, now.day, 0,0,0,0)
seconds = (now - midnight).seconds
j['metadata']['timestamp'] = datetime.datetime.now()
j['metadata']['seconds'] = seconds
j['metadata']['day'] = midnight
print(j)
mongoClient = pymongo.MongoClient('localhost')
db = mongoClient.iot
r = db.iot.insert_one(j)
DEBUG = True
BACKGROUND = False
PID_FILE = "/tmp/mqtt2mongo.pid"
LOG_FILE = "/tmp/mqtt2mongo.log"
BROKER = "mqttbroker"
TOPICS = ['IoT/Measurement/#', 'IoT/WiFiPowerMeter/Measurement']
MONGO_HOST = "172.16.2.15"
MONGO_DATABASE = "test"
MONGO_COLLECTION = "test"
if __name__ == '__main__':
print("Starting client ...")
if BACKGROUND:
pid = os.fork()
else:
pid = 0
if pid:
pidFile = file(PID_FILE , mode='w')
pidFile.write("%i\n" % pid)
pidFile.close()
sys.exit(0)
Logger.openlog(LOG_FILE)
if DEBUG:
Logger.debugEnable()
Logger.log("mqtt2mongo starting")
try:
queue = Queue.Queue()
Logger.log("queue created ...")
client = mqtt.Client()
client.on_message = on_message
client.connect("mqttbroker", 1883, 60)
client.subscribe("IoT/Measurement/#")
client.subscribe("IoT/WiFiPowerMeter/Measurement")
client.loop_forever()
mongoWriter = MongoWriter(queue, MONGO_HOST, MONGO_DATABASE, MONGO_COLLECTION)
mongoWriter.start()
Logger.log("MongoWriter started ...")
mqttReader = MqttReceiver.create(queue, BROKER, TOPICS)
mqttReader.start()
Logger.log("MqttReader started ...")
Logger.log("mqtt2mongo running")
while (True):
time.sleep(10)
except Exception, e:
Logger.log("mqtt2mongo dying from %s, %s" % (str(e), e.msg))
finally:
Logger.log("mqtt2mongo terminating ...")