Exemplo n.º 1
0
    def test_grant_limit(self):
        grant = 'photo_res_max'
        limit = 3
        metric = {grant: {'style': 'grant'}}

        db_session = database.get_session(db_url=self.config.DB_URL)
        response = self.call_endpoint('/grant', 'post', data=dict(
            name=grant, value=str(limit), uid=self.test_uid))
        self.assertEqual(response.status_code, 201)

        with self.config_overrides(metrics=metric):
            self.authorize(new_session=True)
            for count in range(limit):
                self.assertTrue(
                    Metrics(
                        uid=self.test_uid, db_session=db_session).store(grant))
            response = self.call_endpoint(
                '/metric?filter={"name":"%s","uid":"%s"}' % (grant,
                                                             self.test_uid),
                'get')
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.get_json().get('items'), [
                dict(labels=['uid=%s' % self.test_uid], name=grant, value=0)])
            self.assertFalse(
                Metrics(uid=self.test_uid, db_session=db_session).store(grant))
Exemplo n.º 2
0
 def test_check_store_invalid(self):
     with self.assertRaises(AssertionError):
         Metrics().check('bogus_metric')
     with self.assertRaises(AssertionError):
         Metrics().check('api_calls_total')
     with self.assertRaises(AssertionError):
         Metrics().store('bogus_metric')
     with self.assertRaises(AssertionError):
         Metrics().store('api_key_auth_total', value=u'stringsdisallowed')
Exemplo n.º 3
0
    def collect(**kwargs):
        """Collect metrics in prometheus-compatible format

        Args:
            kwargs: as defined in openapi.yaml
        """
        return Metrics().collect(**kwargs)
Exemplo n.º 4
0
    def find(**kwargs):
        """Find multiple metrics

        Args:
            kwargs: as defined in openapi.yaml
        """
        return Metrics().find(**kwargs)
Exemplo n.º 5
0
    def test_integer_increment(self):
        response = self.call_endpoint('/metric?name=api_calls_total&filter='
                                      '{"label":"resource=settings"}', 'get')
        self.assertEqual(response.status_code, 200)
        result = response.get_json()
        self.assertEqual(result['count'], 1)
        value = result['items'][0]['value']

        # Make another call and verify it gets counted
        response = self.call_endpoint('/settings/x-75023275', 'get')
        self.assertEqual(response.status_code, 200)

        response = self.call_endpoint(
            '/metric?filter={"name":"api_calls_total",'
            '"label":"resource=settings"}', 'get')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.get_json()['items'][0]['value'], value + 1)

        # Double-increment also works
        Metrics().store('api_calls_total', labels=['resource=settings'],
                        value=2)
        response = self.call_endpoint(
            '/metric?filter={"name":"api_calls_total",'
            '"label":"resource=settings"}', 'get')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.get_json()['items'][0]['value'], value + 3)
Exemplo n.º 6
0
    def test_warn_threshold_50(self):
        grant = 'photo_daily_total'
        limit = 4
        metric = {grant: {'style': 'grant', 'notify': 50}}

        db_session = database.get_session(db_url=self.config.DB_URL)
        response = self.call_endpoint('/grant', 'post', data=dict(
            name=grant, value=str(limit), uid=self.test_uid))
        self.assertEqual(response.status_code, 201)

        with self.config_overrides(metrics=metric):
            self.authorize(new_session=True)
            for count in range(limit):
                self.assertTrue(
                    Metrics(uid=self.test_uid, db_session=db_session,
                            func_send=self.mock_messaging).store(grant))
            self.mock_messaging.assert_called_once_with(
                to_uid=self.test_uid, template='usage_notify',
                period='day', percent=metric[grant]['notify'], resource=grant)
            response = self.call_endpoint(
                '/metric?filter={"name":"%s","uid":"%s"}' % (
                    grant, self.test_uid),
                'get')
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.get_json().get('items'), [
                dict(labels=['uid=%s' % self.test_uid], name=grant, value=0)])
Exemplo n.º 7
0
    def test_find_several(self):
        response = self.call_endpoint('/metric?offset=2&limit=5', 'get')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.get_json().get('count'), 5)

        response = self.call_endpoint('/metric?filter={"uid":""}', 'get')
        self.assertEqual(response.status_code, 200)
        # this is just to ensure at least one user metric
        db_session = database.get_session(db_url=self.config.DB_URL)
        Metrics(uid=self.test_uid, db_session=db_session).store(
            'video_daily_total')
        db_session.remove()
        self.assertGreaterEqual(response.get_json().get('count'), 1)
Exemplo n.º 8
0
 def create(body):
     """add to list if specified"""
     list_id = body.get('list_id')
     # TODO use many-to-many table instead, once UI is fixed
     # body.pop('list_id', None)
     body['sender_id'] = uid = AccessControl().uid
     if not Metrics(uid=uid, db_session=g.db).store('message_daily_total'):
         return dict(message=_(u'daily limit exceeded')), 405
     retval = super(MessageController, MessageController).create(body)
     if retval[1] == 201 and list_id:
         message_id = retval[0]['id']
         g.db.add(ListMessage(list_id=list_id, message_id=message_id))
         g.db.commit()
     return retval
Exemplo n.º 9
0
 def test_check_limit_decrement(self):
     grant = 'sms_monthly_total'
     db_session = database.get_session(db_url=self.config.DB_URL)
     metrics = Metrics(uid=self.test_uid, db_session=db_session)
     current = metrics.check(grant)
     metrics.store(grant)
     next = metrics.check(grant)
     self.assertEqual(next, current - 1)
     db_session.remove()
Exemplo n.º 10
0
from apicrud.messaging.send import Messaging

import celeryconfig
import models

app = celery.Celery()
app.config_from_object(celeryconfig)
path = os.path.dirname(os.path.abspath(__file__))
config = ServiceConfig(
    reset=True, models=models, file=os.path.join(path, 'config.yaml'),
    template_folders=[os.path.join(path, 'templates')]).config


@app.task(name='tasks.messaging.send_contact')
def send_contact(frm=None, to=None, to_uid=None, template=None, **kwargs):
    """
    Args:
      frm (uid): person
      to (Contact): recipient
      template (str): jinja2 template name
      kwargs: kv pairs
    Raises:
      SendException
    """
    Messaging().send(
        frm=frm, to=to, to_uid=to_uid, template=template, **kwargs)


# Register send_contact, for usage-alert notifications
Metrics(func_send=send_contact.delay)