def stop(): mongo_client = Utils.getmongoclient(logger) db = mongo_client["raspimon"] # close MQTT broker connection mqtt_client.disconnect() # force sending data to MongoDB __upload_all_data(db, __build_raspimon_documents, raspimon_message_queues) __upload_all_data(db, __build_forecast_documents, forecast_message_queues) if len(pending_documents) > 0: db.GVA2015_data.insert(pending_documents) # close rest of pending connections mongo_client.close() logger.close()
def start(): """Opens connections with logger, MongoDB and MQTT broker.""" global logger global mqtt_client global house_data logger = LoggerClient.open("MongoDBHub") mqtt_client = Utils.getpahoclient(logger, __configure_mqtt) mongo_client = Utils.getmongoclient(logger) db = mongo_client["raspimon"] col = db["GVA2015_houses"] house_data = col.find_one({"raspi": raspi_mac}) assert house_data is not None mongo_client.close()
def upload_data(): try: mongo_client = Utils.getmongoclient(logger) db = mongo_client["raspimon"] t = time.time() raspimon_batch = __build_after_deadline_documents( __build_raspimon_documents, raspimon_message_queues, t) forecast_batch = __build_after_deadline_documents( __build_forecast_documents, forecast_message_queues, t) global pending_documents insert_batch = raspimon_batch + forecast_batch + pending_documents pending_documents = [] try: if len(insert_batch) > 0: db.GVA2015_data.insert(insert_batch) except: pending_documents = insert_batch if len(pending_documents) > PENDING_DOCUMENTS_LENGTH_ERROR: logger.error( "Pending %s messages is above data loss threshold %d, sadly pending list set to zero :S", len(pending_documents), PENDING_DOCUMENTS_LENGTH_ERROR) pending_documents = [] # data loss here :'( elif len(pending_documents) > PENDING_DOCUMENTS_LENGTH_WARNING: logger.alert( "Pending %s messages is above warning threshold %d, data loss will occur at %d", len(pending_documents), PENDING_DOCUMENTS_LENGTH_WARNING, PENDING_DOCUMENTS_LENGTH_ERROR) else: logger.warning("Connection with database is failing") raise logger.info("Inserted %d documents", len(insert_batch)) mongo_client.close() except: print "Unexpected error:", traceback.format_exc() logger.error("Unexpected error: %s", traceback.format_exc())