Esempio n. 1
0
class Scion(Car):
    any_owner = field.DynamicDocument()
    color = field.Choice(choices=["Red", "Blue", "Green"])
    make = field.Char(default="Scion")
    model = field.Char(default="xA")
    year = field.Date(default=datetime.datetime(2007, 1, 1))
    silly_date = field.TimeStamp()
Esempio n. 2
0
class Car(orm.Document):
    _db = "test"
    _collection = "cars"
    owner = field.DocumentId(type=Human)
    make = field.Char()
    model = field.Char()
    year = field.Date()
Esempio n. 3
0
class Admin(orm.Document):
    _db = "lablog"
    _collection = "client_admins"
    _indexes = [
        orm.Index('email', key=('email', 1), unique=True),
    ]

    name = field.Char()
    email = field.Char()
    password = field.Char()
    last_login = field.Date()
    clients = orm.List(type=ClientRef)
    social_accounts = orm.List(type=SocialAccount)
    facebook_pages = orm.List(type=FacebookPage)
    in_office = field.Boolean(default=False)

    @staticmethod
    def passwords_match(pwd, cpwd):
        return pwd == cpwd

    def save(self):
        if self.password:
            if not password.identify(self.password):
                self.password = password.encrypt_password(self.password)
        return super(Admin, self).save()

    def verify_pwd(self, pwd):
        return password.check_password(pwd, self.password)

    def social_account(self, account_type=None):
        for sa in self.social_accounts:
            if sa.type == account_type: return sa
        sa = SocialAccount()
        sa.type = account_type
        return sa

    def get_punchcard(self, influx):
        try:
            res = influx.query(
                "SELECT value from \"lablog\".\"realtime\".\"presence\" where user_id='{}' AND time > now() - 2d"
                .format(self._id))
            r = [p for p in res.get_points()]
            r.reverse()
            return r
        except:
            return []

    def is_authenticated(self):
        if self._id: return True
        return False

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        self.logger.info(unicode(self._id))
        return unicode(self._id)
Esempio n. 4
0
class Token(orm.Document):
    _db = 'lablog'
    _collection = 'tokens'

    _indexes = [
        orm.Index('access_token', key=('access_token', 1), unique=True),
        orm.Index('refresh_token', key=('refresh_token', 1), unique=True),
        orm.Index('client', key=('client', 1)),
        orm.Index('user', key=('user', 1)),
        orm.Index('user_agent', key=('user_agent', 1)),
    ]

    access_token = field.Char()
    refresh_token = field.Char()
    client = field.DocumentId(type=Client)
    scopes = orm.List(type=unicode)
    expires = field.Date()
    user = field.DocumentId(type=Admin)
    user_agent = field.Char()
    _type = field.Char()

    @property
    def token_type(self):
        return self._type

    def delete(self):
        self.remove()
Esempio n. 5
0
class Car(orm.Document):
    _db = "test"
    _collection = "cars"
    owner = field.DynamicDocument()
    make = field.Char()
    model = field.Char()
    year = field.Date()
    silly_date = field.TimeStamp()
Esempio n. 6
0
class Car(orm.Document):
    _db = "test"
    _collection = "cars"
    owner = field.DocumentId(type=Human)
    make = field.Char()
    model = field.Char()
    year = field.Date()
    features = orm.List(type=unicode)
    properties = orm.List(type=Property)
Esempio n. 7
0
class Experiment(orm.Document):
    """
    Base class for various experiments
    """
    _db = "os_mongo"
    _collection = "experiments"
    experiment_id = field.AutoIncrement(collection="experiment")
    organization = field.Char(required=True)
    title = field.Char(required=True)
    description = field.Char(required=False)
    date = field.Date(required=True)
Esempio n. 8
0
class Grant(orm.Document):
    _db = 'lablog'
    _collection = 'grants'
    client = field.DocumentId(type=Client)
    code = field.Char()
    user = field.DocumentId(type=Admin)
    scopes = orm.List(type=unicode)
    expires = field.Date()
    redirect_url = field.Char()

    def delete(self):
        self.remove()
Esempio n. 9
0
class Admin(orm.Document):
    _db = "entropealabs"
    _collection = "client_admins"
    _indexes = [
        orm.Index('email', key=('email', 1), unique=True),
    ]

    name = field.Char()
    email = field.Char()
    password = field.Char()
    last_login = field.Date()
    client = field.DocumentId(type=Client)
    social = SocialAccounts(type=SocialAccount)
    facebook_pages = orm.List(type=FacebookPage)

    def social_account(self, account_type=None):
        for sa in self.social_accounts:
            if sa.type == account_type: return sa
        sa = SocialAccount()
        sa.type = account_type
        return sa

    @staticmethod
    def passwords_match(pwd, cpwd):
        if pwd == cpwd: return True
        return False

    def save(self):
        if not password.identify(self.password):
            self.password = password.encrypt_password(self.password)
        return super(Admin, self).save()

    def verify_pwd(self, pwd):
        self.logger.info(password.encrypt_password(pwd))
        self.logger.info(self.password)
        return password.check_password(pwd, self.password)

    def is_authenticated(self):
        if self._id: return True
        return False

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        self.logger.info(unicode(self._id))
        return unicode(self._id)
Esempio n. 10
0
class Trigger(orm.Document):
    _db = "lablog"
    _collection = "triggers"

    _indexes = [
        orm.Index('name', key=('name', 1), unique=True),
        orm.Index('key', key=('key', 1)),
    ]

    name = field.Char()
    key = field.Char()
    last_run = field.Date()
    _me = field.DynamicDocument()

    def save(self, *args, **kwargs):
        if not self._id:
            self._me = {}
            self.last_run = datetime.utcnow() - timedelta(minutes=60)
            super(Trigger, self).save(*args, **kwargs)
            self._me = self
        return super(Trigger, self).save(*args, **kwargs)

    def _run(self, message):
        interface = message['tags']['interface']
        try:
            ret = self._me.run(message)
        except TriggerEnabled as e:
            ti = TriggerInstance.find_one({
                'interface': interface,
                'trigger.id': self._id
            })
            if not ti: ti = TriggerInstance()
            ti.enabled = True
            ti.interface = interface
            ti.level = e.level
            ti.key = self._me.key
            ti.trigger = self._me
            ti.save()
            self.last_run = datetime.utcnow()
            self.save()
        except TriggerDisabled as e:
            ti = TriggerInstance.find_one({
                'interface': interface,
                'trigger.id': self._id
            })
            if not ti: return
            ti.enabled = False
            ti.save()

        return
Esempio n. 11
0
class SocialAccount(orm.EmbeddedDocument):
    TWITTER = 'twitter'
    FACEBOOK = 'facebook'
    GOOGLE = 'google'
    LINKEDIN = 'linkedin'

    type = field.Char()
    id = field.Char()
    name = field.Char()
    app_id = field.Char()
    token = orm.Field()
    secret = field.Char()
    avatar = field.Char()
    permissions = orm.List(type=unicode)
    categories = orm.List(type=PageCategory)
    last_sync = field.Date()

    def __call__(self, *args, **kwargs):
        data = kwargs.pop('data', {})
        self._map(data)
        return self
Esempio n. 12
0
class Interface(orm.Document):
    _db = 'lablog'
    _collection = 'interfaces'
    exchange = None
    measurement_key = None
    run_delta = None  #datetime.timedelta(minutes=5)

    _last_run = field.Date()
    _enabled = field.Boolean(default=True)

    def run(self, db, mq, data=None):
        now = datetime.datetime.utcnow()
        if not self.run_delta:
            logging.info("No Delta")
            return
        if not self._last_run or ((now - self._last_run) >= self.run_delta):
            logging.info("Going")
            self.go(db, mq, data)
            logging.info("Updating last run")
            self._last_run = datetime.datetime.utcnow()
            self.save()
        else:
            logging.info("No need to run")
        return True

    def data(self, data=None):
        raise NotImplemented(
            'data method should be overridden in subclass and return data')

    def parse(self, data):
        if not data: raise NoData()
        data = self.parse_data(data)
        return data

    def parse_data(self, data):
        raise NotImplemented(
            'parse_data method should be overridden in subclass and needs to return parsed data'
        )

    def log(self, data, db):
        db.write_points(data)

    def queue(self, data, mq, exchange):
        for i in data:
            key = i['measurement']
            messages.publish(mq, i, exchange, routing_key=key)

    def go(self, db, mq, data=None):
        raw_data = self.data(data=data)
        parsed_data = self.parse(raw_data)
        self.log(parsed_data, db)
        self.queue(parsed_data, mq, self.exchange)
        return parsed_data

    def get_long_history(self, db, _from):
        historical = "SELECT MEAN(value) as value FROM \"lablog\".\"1hour\"./{}.*/ WHERE time > now() - {} AND interface='{}' GROUP BY time(1d) fill(0)".format(
            self.measurement_key, _from, self._id)
        logging.info(historical)
        try:
            res = db.query(historical)
        except Exception as e:
            res = {}
        ret = {}
        for t, g in res.items():
            ret.setdefault(t[0], {})
            ret[t[0]] = {'historical': [p for p in g]}

        return ret

    def get_current(self, db):
        current = "SELECT LAST(value) as value FROM \"lablog\".\"realtime\"./{}.*/ WHERE interface='{}'".format(
            self.measurement_key, self._id)
        res = db.query(current)
        ret = {}
        for t, g in res.items():
            ret.setdefault(t[0], {})
            ret[t[0]].update({'current': [p for p in g]})
        return ret

    def get_values(self, db, _from):
        historical = "SELECT value FROM \"lablog\".\"1hour\"./{}.*/ WHERE time > now() - {} AND interface='{}'".format(
            self.measurement_key, _from, self._id)
        previous = "SELECT FIRST(value) as value FROM \"lablog\".\"1hour\"./{}.*/ WHERE time > now() - {} AND interface='{}'".format(
            self.measurement_key, _from, self._id)
        current = "SELECT LAST(value) as value FROM \"lablog\".\"realtime\"./{}.*/ WHERE interface='{}'".format(
            self.measurement_key, self._id)
        aggregate = "SELECT MIN(value) as min_value, MAX(value) as max_value, MEAN(value) as mean_value FROM \"lablog\".\"1hour\"./{}.*/ WHERE time > now() - {} AND interface='{}'".format(
            self.measurement_key, _from, self._id)
        triggers = TriggerInstance.find({
            'enabled': True,
            'interface': str(self._id)
        })

        sql = "{};{};{};{}".format(historical, previous, current, aggregate)
        try:
            res = db.query(sql)
        except Exception as e:
            res = [{}, {}, {}, {}]
        ret = {}
        for t, g in res[0].items():
            ret.setdefault(t[0], {})
            ret[t[0]] = {'historical': [p for p in g]}
        for t, g in res[1].items():
            ret.setdefault(t[0], {})
            ret[t[0]].update({'previous': [p for p in g]})
        for t, g in res[2].items():
            ret.setdefault(t[0], {})
            ret[t[0]].update({'current': [p for p in g]})
        for t, g in res[3].items():
            ret.setdefault(t[0], {})
            ret[t[0]].update({'aggregate': [p for p in g]})

        logging.info("Triggers!")
        for t in triggers:
            logging.info(t.json())
            v = ret.get(t.key)
            if v: v.update({'trigger': t.level})

        return ret