def test_get_db_engine(self): from sentry.utils import get_db_engine _databases = getattr(django_settings, 'DATABASES', {}).copy() django_settings.DATABASES['default'] = {'ENGINE': 'blah.sqlite3'} self.assertEquals(get_db_engine(), 'sqlite3') django_settings.DATABASES['default'] = {'ENGINE': 'blah.mysql'} self.assertEquals(get_db_engine(), 'mysql') django_settings.DATABASES = _databases
def evaluate(self, node, qn, connection): engine = get_db_engine(getattr(connection, 'alias', 'default')) if engine.startswith('postgresql'): sql = 'log(times_seen) * 600 + last_seen::abstime::int' elif engine.startswith('mysql'): sql = 'log(times_seen) * 600 + unix_timestamp(last_seen)' else: # XXX: if we cant do it atomicly let's do it the best we can sql = self.group.get_score() return (sql, [])
def test_get_db_engine(self): from sentry.utils import get_db_engine _databases = getattr(django_settings, 'DATABASES', {}).copy() _engine = django_settings.DATABASE_ENGINE django_settings.DATABASE_ENGINE = '' django_settings.DATABASES['default'] = {'ENGINE': 'blah.sqlite3'} self.assertEquals(get_db_engine(), 'sqlite3') django_settings.DATABASE_ENGINE = 'mysql' self.assertEquals(get_db_engine(), 'sqlite3') django_settings.DATABASES['default'] = {'ENGINE': 'blah.mysql'} self.assertEquals(get_db_engine(), 'mysql') django_settings.DATABASES = _databases django_settings.DATABASE_ENGINE = _engine
def _get_date_trunc(self, col, db='default'): conn = connections[db] engine = get_db_engine(db) # TODO: does extract work for sqlite? if engine.startswith('oracle'): method = conn.ops.date_trunc_sql('hh24', col) else: method = conn.ops.date_trunc_sql('hour', col) return method
def get_chart_data(self, group, max_days=90): if hasattr(group, '_state'): db = group._state.db else: db = 'default' if not has_charts(db): return [] conn = connections[db] engine = get_db_engine(db) # TODO: does extract work for sqlite? if engine.startswith('oracle'): method = conn.ops.date_trunc_sql('hh24', 'date') else: method = conn.ops.date_trunc_sql('hour', 'date') hours = max_days * 24 today = datetime.datetime.now().replace(microsecond=0, second=0, minute=0) min_date = today - datetime.timedelta(hours=hours) chart_qs = list(group.messagecountbyminute_set.all()\ .filter(date__gte=min_date)\ .extra(select={'grouper': method}).values('grouper')\ .annotate(num=Sum('times_seen')).values_list('grouper', 'num')\ .order_by('grouper')) if not chart_qs: return [] rows = dict(chart_qs) #just skip zeroes first_seen = hours while not rows.get(today - datetime.timedelta( hours=first_seen)) and first_seen > 24: first_seen -= 1 return [ rows.get(today - datetime.timedelta(hours=d), 0) for d in xrange(first_seen, -1, -1) ]
def chart_data(group, max_days=90): hours = max_days * 24 today = datetime.datetime.now().replace(microsecond=0, second=0, minute=0) min_date = today - datetime.timedelta(hours=hours) if hasattr(group, '_state'): db = group._state.db else: db = 'default' conn = connections[db] if get_db_engine(getattr(conn, 'alias', 'default')).startswith('oracle'): method = conn.ops.date_trunc_sql('hh24', 'datetime') else: method = conn.ops.date_trunc_sql('hour', 'datetime') chart_qs = list(group.message_set.all()\ .filter(datetime__gte=min_date)\ .extra(select={'grouper': method}).values('grouper')\ .annotate(num=Count('id')).values_list('grouper', 'num')\ .order_by('grouper')) if not chart_qs: return {} rows = dict(chart_qs) #just skip zeroes first_seen = hours while not rows.get(today - datetime.timedelta( hours=first_seen)) and first_seen > 24: first_seen -= 1 return { 'points': [ rows.get(today - datetime.timedelta(hours=d), 0) for d in xrange(first_seen, -1, -1) ], 'categories': [ str(today - datetime.timedelta(hours=d)) for d in xrange(first_seen, -1, -1) ], }
def get_chart_data(self, group, max_days=90): if hasattr(group, '_state'): db = group._state.db else: db = 'default' if not has_charts(db): return [] conn = connections[db] engine = get_db_engine(db) # TODO: does extract work for sqlite? if engine.startswith('oracle'): method = conn.ops.date_trunc_sql('hh24', 'date') else: method = conn.ops.date_trunc_sql('hour', 'date') hours = max_days*24 today = datetime.datetime.now().replace(microsecond=0, second=0, minute=0) min_date = today - datetime.timedelta(hours=hours) chart_qs = list(group.messagecountbyminute_set.all()\ .filter(date__gte=min_date)\ .extra(select={'grouper': method}).values('grouper')\ .annotate(num=Sum('times_seen')).values_list('grouper', 'num')\ .order_by('grouper')) if not chart_qs: return [] rows = dict(chart_qs) #just skip zeroes first_seen = hours while not rows.get(today - datetime.timedelta(hours=first_seen)) and first_seen > 24: first_seen -= 1 return [rows.get(today-datetime.timedelta(hours=d), 0) for d in xrange(first_seen, -1, -1)]
def chart_data(group, max_days=90): hours = max_days*24 today = datetime.datetime.now().replace(microsecond=0, second=0, minute=0) min_date = today - datetime.timedelta(hours=hours) if hasattr(group, '_state'): db = group._state.db else: db = 'default' conn = connections[db] if get_db_engine(getattr(conn, 'alias', 'default')).startswith('oracle'): method = conn.ops.date_trunc_sql('hh24', 'datetime') else: method = conn.ops.date_trunc_sql('hour', 'datetime') chart_qs = list(group.message_set.all()\ .filter(datetime__gte=min_date)\ .extra(select={'grouper': method}).values('grouper')\ .annotate(num=Count('id')).values_list('grouper', 'num')\ .order_by('grouper')) if not chart_qs: return {} rows = dict(chart_qs) #just skip zeroes first_seen = hours while not rows.get(today - datetime.timedelta(hours=first_seen)) and first_seen > 24: first_seen -= 1 return { 'points': [rows.get(today-datetime.timedelta(hours=d), 0) for d in xrange(first_seen, -1, -1)], 'categories': [str(today-datetime.timedelta(hours=d)) for d in xrange(first_seen, -1, -1)], }
def has_charts(db): engine = get_db_engine(db) if engine.startswith('sqlite'): return False return True
def _get_group_list(request, project, view=None): filters = [] for cls in Filter.objects.filter(Group): filters.append(cls(request)) event_list = Group.objects if request.GET.get('bookmarks'): event_list = event_list.filter( bookmark_set__project=project, bookmark_set__user=request.user, ) else: event_list = event_list.filter(project=project) if view: event_list = event_list.filter(views=view) for filter_ in filters: if not filter_.is_set(): continue event_list = filter_.get_query_set(event_list) sort = request.GET.get('sort') if sort not in SORT_OPTIONS: sort = settings.DEFAULT_SORT_OPTION if sort.startswith('accel_') and not has_trending(): sort = settings.DEFAULT_SORT_OPTION if not sort.startswith('accel_'): since = request.GET.get('since', '') if since not in DATE_OPTIONS: since = settings.DEFAULT_DATE_OPTION else: since = None engine = get_db_engine('default') if engine.startswith('sqlite'): sort_clause = SQLITE_SORT_CLAUSES.get(sort) elif engine.startswith('mysql'): sort_clause = MYSQL_SORT_CLAUSES.get(sort) else: sort_clause = SORT_CLAUSES.get(sort) if sort == 'tottime': event_list = event_list.filter(time_spent_count__gt=0) elif sort == 'avgtime': event_list = event_list.filter(time_spent_count__gt=0) elif sort.startswith('accel_'): event_list = Group.objects.get_accelerated(event_list, minutes=int(sort.split('_', 1)[1])) if since in DATE_VALUES: event_list = event_list.filter(last_seen__gte=datetime.datetime.now() - DATE_VALUES[since]) if sort_clause: event_list = event_list.extra( select={'sort_value': sort_clause}, ).order_by('-sort_value', '-last_seen') cursor = request.GET.get('cursor') if cursor: event_list = event_list.extra( where=['%s > %%s' % sort_clause], params=[cursor], ) return filters, event_list
sort = request.GET.get('sort') if sort not in SORT_OPTIONS: sort = settings.DEFAULT_SORT_OPTION if sort.startswith('accel_') and not has_trending(): sort = settings.DEFAULT_SORT_OPTION if not sort.startswith('accel_'): since = request.GET.get('since', '') if since not in DATE_OPTIONS: since = settings.DEFAULT_DATE_OPTION else: since = None engine = get_db_engine('default') if engine.startswith('sqlite'): sort_clause = SQLITE_SORT_CLAUSES.get(sort) elif engine.startswith('mysql'): sort_clause = MYSQL_SORT_CLAUSES.get(sort) else: sort_clause = SORT_CLAUSES.get(sort) if sort == 'tottime': event_list = event_list.filter(time_spent_count__gt=0) elif sort == 'avgtime': event_list = event_list.filter(time_spent_count__gt=0) elif sort.startswith('accel_'): event_list = Group.objects.get_accelerated(event_list, minutes=int(sort.split('_', 1)[1])) if since in DATE_VALUES: