Esempio n. 1
0
def setup_triggers(connection):
    envWerk = os.environ.get("WERKZEUG_RUN_MAIN")
    print('Value of WERKZEUG', envWerk)

    # The app is not in debug mode or we are in the reloaded process
    if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
        # Setup triggers
        # Connection must have oplog enable
        # Start mongod with option --replSet rs and then execute rs.initiate() in mongo shell
        triggers = MongoTrigger(connection)

        sportCollections = connection[databaseName].list_collection_names()

        # Put a trigger on each sport collection on insert operation
        for sport in sportCollections:
            # skip position average age collection
            if sport == postAvgAgeCollectionName:
                continue

            print(sport)
            triggers.register_insert_trigger(
                insert_trigger, databaseName, sport
            )  # register_op_trigger(func, db_name=None, collection_name=None)
            #triggers.register_update_trigger(notify_manager, databaseName, sport)
            #triggers.register_delete_trigger(notify_manager, databaseName, sport)

        # listens to update/insert/delete by tailing operation log, any of these will trigger the callback
        triggers.tail_oplog()
    else:
        print('setup_triggers function has been called already')
Esempio n. 2
0
from tkpt_tagger import TkPt_Tagger
from mongotriggers import MongoTrigger
from pymongo import MongoClient
import mongo_setup as mongo_setup

tagger = TkPt_Tagger()


def notify_manager(op_document):
    print(op_document['o'])
    print('\nNew Message:\n' + op_document['o']['text'])
    tag = tagger.Classify(op_document['o']['text'])
    print('\nPredicted tag:\n' + tag)
    result = db.messages.update_one({'_id': op_document['o']['_id']},
                                    {'$set': {
                                        'tag': tag
                                    }})
    print(result)


mongo_setup.global_init()

client = MongoClient(host='localhost', port=3001)
db = client.meteor

triggers = MongoTrigger(client)
triggers.register_insert_trigger(notify_manager, 'meteor', 'messages')
triggers.tail_oplog()
        print('Could not create tilt object.')


try:
    client = MongoClient(
        'mongodb://*****:*****@mongo/?authSource=tilt&authMechanism=SCRAM-SHA-256'
    )
    # client = MongoClient('mongodb://*****:*****@mongo:27017/?authSource=admin&authMechanism=SCRAM-SHA-256&replicaSet=rs0')

    triggers = MongoTrigger(client)

    # triggers on any change ('op')

    #triggers.register_op_trigger(notify_manager, 'tilt', 'tilt')
    try:
        triggers.register_insert_trigger(notify_manager, 'tilt', 'tilt')
    except:
        print('Failed to register trigger!')

    print('Tailing oplog...')
    triggers.tail_oplog()

    try:
        print('Validating document...')
        # Action that should be performed
        client['tilt']['tilt-python-triggers'].insert_one({
            "validation":
            datetime.timestamp(datetime.now()),
            "validation_result":
            "completed"
        })
Esempio n. 4
0
class TriggerHandler:
    # Takes in client, db name, and collection name
    # Optional logger function to capture logs
    def __init__(self, client, db_name, collection_name, logger=None):
        self.client = client
        self.database = client[db_name]
        self.triggers = MongoTrigger(client)
        self.logger = logger  # used to send logs back to manager

        self.db_name = db_name
        self.collection_name = collection_name

        # Set trigger on collection
        self.triggers.register_insert_trigger(self._handle_insert, db_name=db_name, collection_name=collection_name)
        self.triggers.register_update_trigger(self._handle_update, db_name=db_name, collection_name=collection_name)
        self.triggers.register_delete_trigger(self._handle_delete, db_name=db_name, collection_name=collection_name)

        # Trigger callbacks
        self.insert_callback = None
        self.update_callback = None
        self.delete_callback = None


    # Start watching for new operations
    def start_triggers(self):
        self.log("Setting triggers on " + str(self.db_name) + " -> " + str(self.collection_name))
        self.triggers.tail_oplog()

    # Stop watching and release triggers
    def stop_triggers(self):
        self.log("Stopping triggers")
        self.triggers.stop_tail()


    def set_insert_callback(self, insert_callback):
        self.log("Setting insert callback")
        self.insert_callback = insert_callback

    def set_update_callback(self, update_callback):
        self.log("Setting update callback")
        self.update_callback = update_callback

    def set_delete_callback(self, delete_callback):
        self.log("Setting delete callback")
        self.delete_callback = delete_callback


    # --- Trigger functions ---
    # Build operation based on op type, called by mongo triggers
    def _handle_insert(self, op_document):
        self.log("Triggered on insert")
        self.insert_callback(op_document['o']['_id'], op_document['o'].get('imsi'))
        
    def _handle_update(self, op_document):
        self.log("Triggered on update")
        self.update_callback(op_document['o2']['_id'])

    def _handle_delete(self, op_document):
        self.log("Triggered on delete <!!! NOT SUPPORTED !!!>")
        self.delete_callback(op_document['o']['_id'])

    def log(self, message):
        if self.logger:
            self.logger("(TriggerHandler) " + message)