Esempio n. 1
0
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())
Esempio n. 2
0
def init():
    global client
    global trigger
    global db
    client = MongoClient("")
    trigger = MongoTrigger(client)
    db = client['why']
Esempio n. 3
0
    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
Esempio n. 4
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')
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
Esempio n. 6
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()
Esempio n. 7
0
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:
Esempio n. 10
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)
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()