コード例 #1
0
ファイル: tasks.py プロジェクト: franklyx/IOT_acquisition
def exist_device(self, item):
    """
    :param self: instance
    :param item: [object]The Original Json Object
    :return: [Object]The Input parameter 'item'
    """
    try:
        factory_id = rcon.get("factory_id")
        if not factory_id:
            collection = conn.factory.factory
            factory = collection.find_one()
            if not factory:
                raise FactoryMissingError
            rcon.set("factory_id", factory["_id"])
            factory_id = factory["_id"]

        device_id = item["ManufacturingCode"]
        if not rcon.sismember("devices", device_id):
            conn[factory_id].equipment.ensure_index([("factory_number", 1)],
                                                    backgroud=True,
                                                    unique=True)
            device = conn[factory_id].equipment.find_one(
                {"factory_number": device_id})
            if not device:
                raise DeviceMissingError
            rcon.sadd("devices", device_id)

        return item
    except Exception as exc:
        traceback.print_exc()
        raise self.retry(exc=exc)
コード例 #2
0
ファイル: tasks.py プロジェクト: franklyx/IOT_acquisition
def record_to_mongodb(self, is_alarm, payload):
    """
    :param self: instance
    :param is_alarm: [number]optional 0(normal)、1(alarm)
    :param payload: [object]The Original Json Object
    :return: The Input parameter 'payload'
    """
    item = copy.deepcopy(payload)  # ensure that the param 'payload' won't be changed
    result1, result2, collection1, collection2 = None, None, None, None
    try:
        device_id = item["ManufacturingCode"]
        item["_id"] = ObjectId().__str__()
        item["Timestamp"] = datetime.datetime.strptime(item["Timestamp"], "%Y-%m-%d %H:%M:%S")

        # insert to product database
        db = rcon.get("factory_id")
        table = device_id+"_alarm" if is_alarm else device_id
        collection1 = conn[db][table]
        collection2 = conn.message_cache.bin_log
        result1 = collection1.insert(item)
        collection1.ensure_index([("Timestamp", 1)], backgroud=True)

        # insert to message_cache database
        version = {"_id": ObjectId().__str__(), "db": db, "table": table, "action": "insert",
                   "type": is_alarm, "para": dumps([item])}
        result2 = collection2.insert(version)
        return payload
    except Exception, exc:
        traceback.print_exc()
        if result1 and not result2:
            collection1.remove(item)
        # retry again
        raise self.retry(exc=exc)