def init(): """ Initialisation function that connects to the database and provides the database with the ngrok tunnel url. Note that if you run into trouble with this , you can change the IP line to simply have your broker machines ip, as netifaces attempts to find your ip based on the adapter in the params. Also note that if you do not want remote connectivity, you can remove the http reuesr and set the url to your localhost """ global client global trigger global db global url #ip = ni.ifaddresses('wlan0')[ni.AF_INET][0]['addr'] url = ngrok.connect(5000, "http") print(url) client = MongoClient(dbCreds.uri) trigger = MongoTrigger(client) db = client[dbCreds.dbName] r = requests.put(f"{url}/broker/notifyURL", json={ "Broker": ip, "URL": url }) print(r.json())
def init(): global client global trigger global db client = MongoClient("") trigger = MongoTrigger(client) db = client['why']
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
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')
import pymongo import random import math import dns from scipy.stats import norm from datetime import datetime, date from bson.objectid import ObjectId from mongotriggers import MongoTrigger client = pymongo.MongoClient( "mongodb+srv://SRDewan:[email protected]/Data?retryWrites=true&w=majority" ) triggers = MongoTrigger(client) db = client["Data"] profiles = db["Profile"] posts = db["posts"] users = db["users"] queue = db["Queue"] def rank_answers(upvotes): newArray = upvotes.copy() newArray.sort(reverse=True) ranks = {} rank = 1 for index in range(len(newArray)): element = newArray[index] if element not in ranks: ranks[element] = rank
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()
from mongotriggers import MongoTrigger from pymongo import MongoClient from time import sleep def notify_manager(op_document): print ('Document updated!') client = MongoClient(host='localhost', port=27017) triggers = MongoTrigger(client) # listens to update triggers.register_update_trigger(notify_manager, 'my_account', 'my_transactions') triggers.tail_oplog() while True: print("inside the bucle") sleep(20)
def notify_manager(op_document): print('Document change occured!') try: t = tilt.from_dict(op_document) print(tilt.meta.name) except: 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
""" from mongotriggers import MongoTrigger from pymongo import MongoClient import RPi.GPIO as GPIO relayPin1 = 38 #relay 1 relayPin2 = 40 #relay 2 GPIO.setmode(GPIO.BOARD) GPIO.setup(relayPin1, GPIO.OUT) GPIO.setup(relayPin2, GPIO.OUT) client = MongoClient(host='localhost', port=27017) db = client.test_relays triggers = MongoTrigger(client) #callback function, this function is called when some register is updated in the database def set_relays_state(op_document=None): state_rel_1 = db.relays.find({"relay": 1})[0]['state'] state_rel_2 = db.relays.find({"relay": 2})[0]['state'] if int(state_rel_1) == 1: print(int(state_rel_1), ' rel_1 state') GPIO.output(relayPin1, GPIO.LOW) else: print(int(state_rel_1), ' rel_1 state') GPIO.output(relayPin1, GPIO.HIGH) if int(state_rel_2) == 1:
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)
from mongotriggers import MongoTrigger from pymongo import MongoClient def notify_manager(op_document): print('new entry') client = MongoClient(host='localhost', port=27017) triggers = MongoTrigger(conn) triggers.register_op_trigger(notify_manager, 'thesocialmedia', 'user') triggers.tail_oplog() client['thesocialmedia']['user'].insert_many( {"profile_pic": "images/avatar3.png"}, {"state": "not set"}, {"country": "not set"}) triggers.stop_tail()