def query_entrypoints(custom_permission_factory): """Same as event_entrypoints for queries.""" from pkg_resources import EntryPoint entrypoint = EntryPoint('invenio_stats', 'queries') data = [] result = [] conf = [ dict(query_name='test-query', query_class=CustomQuery, query_config=dict(index='stats-file-download', copy_fields=dict(bucket_id='bucket_id', ), required_filters=dict(bucket_id='bucket_id', )), permission_factory=custom_permission_factory), dict(query_name='test-query2', query_class=CustomQuery, query_config=dict(index='stats-file-download', copy_fields=dict(bucket_id='bucket_id', ), required_filters=dict(bucket_id='bucket_id', )), permission_factory=custom_permission_factory) ] result += conf result += register_queries() entrypoint.load = lambda conf=conf: (lambda: result) data.append(entrypoint) entrypoints = mock_iter_entry_points_factory(data, 'invenio_stats.queries') with patch('invenio_stats.ext.iter_entry_points', entrypoints): yield result
def test_terms_query(app, event_queues, aggregated_events): """Test that the terms query returns the correct total count.""" query_configs = register_queries() terms_query = ESTermsQuery(query_name='test_total_count', **query_configs[1]['query_config']) results = terms_query.run(bucket_id='B0000000000000000000000000000001', start_date=datetime.datetime(2017, 1, 1), end_date=datetime.datetime(2017, 1, 7)) assert int(results['buckets'][0]['value']) == 49
def test_index_prefix(config_with_index_prefix, app, event_queues, es_with_templates): es = es_with_templates search = Search(using=es) # 1) publish events in the queue current_stats.publish('file-download', [ _create_file_download_event(date) for date in [(2018, 1, 1), (2018, 1, 2), (2018, 1, 3), (2018, 1, 4)] ]) queue = current_queues.queues['stats-file-download'] assert get_queue_size('stats-file-download') == 4 # 2) preprocess events indexer = EventsIndexer(queue, preprocessors=[flag_machines, flag_robots]) indexer.run() es.indices.refresh(index='*') assert get_queue_size('stats-file-download') == 0 index_prefix = config_with_index_prefix['SEARCH_INDEX_PREFIX'] index_name = index_prefix + 'events-stats-file-download' assert es.indices.exists(index_name + '-2018-01-01') assert es.indices.exists(index_name + '-2018-01-02') assert es.indices.exists(index_name + '-2018-01-03') assert es.indices.exists(index_name + '-2018-01-04') assert es.indices.exists_alias(name=index_name) # 3) aggregate events aggregate_events(['file-download-agg']) es.indices.refresh(index='*') es.indices.exists(index_prefix + 'stats-file-download-2018-01') # 4) queries query_configs = register_queries() histo_query = ESDateHistogramQuery(query_name='test_histo', **query_configs[0]['query_config']) results = histo_query.run(bucket_id='B0000000000000000000000000000001', file_key='test.pdf', start_date=datetime.datetime(2018, 1, 1), end_date=datetime.datetime(2018, 1, 3)) assert len(results['buckets']) for day_result in results['buckets']: assert int(day_result['value']) == 1 terms_query = ESTermsQuery(query_name='test_total_count', **query_configs[1]['query_config']) results = terms_query.run(bucket_id='B0000000000000000000000000000001', start_date=datetime.datetime(2018, 1, 1), end_date=datetime.datetime(2018, 1, 7)) assert int(results['buckets'][0]['value']) == 4
def test_histogram_query(app, event_queues, aggregated_events): """Test that the histogram query returns the correct results for each day.""" # reading the configuration as it is registered from registrations.py query_configs = register_queries() histo_query = ESDateHistogramQuery(query_name='test_histo', **query_configs[0]['query_config']) results = histo_query.run(bucket_id='B0000000000000000000000000000001', file_key='test.pdf', start_date=datetime.datetime(2017, 1, 1), end_date=datetime.datetime(2017, 1, 7)) for day_result in results['buckets']: assert int(day_result['value']) == 2