Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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())