7
7
8
8
from qiita_core .util import execute_as_transaction
9
9
from qiita_core .qiita_settings import qiita_config
10
- from qiita_db .util import get_count
11
10
from qiita_db .study import Study
12
- from qiita_db .meta_util import get_lat_longs
13
11
from .base_handlers import BaseHandler
14
12
15
13
16
14
class StatsHandler (BaseHandler ):
17
15
@execute_as_transaction
18
16
def _get_stats (self , callback ):
19
- # check if the key exists in redis
20
- redis_lats_key = '%s:stats:sample_lats' % qiita_config .portal
21
- redis_longs_key = '%s:stats:sample_longs' % qiita_config .portal
22
- lats = r_client .lrange (redis_lats_key , 0 , - 1 )
23
- longs = r_client .lrange (redis_longs_key , 0 , - 1 )
24
- if not (lats and longs ):
25
- # if we don't have them, then fetch from disk and add to the
26
- # redis server with a 24-hour expiration
27
- lat_longs = get_lat_longs ()
28
- lats = [float (x [0 ]) for x in lat_longs ]
29
- longs = [float (x [1 ]) for x in lat_longs ]
30
- with r_client .pipeline () as pipe :
31
- for latitude , longitude in lat_longs :
32
- # storing as a simple data structure, hopefully this
33
- # doesn't burn us later
34
- pipe .rpush (redis_lats_key , latitude )
35
- pipe .rpush (redis_longs_key , longitude )
17
+ # initializing values
18
+ number_studies , number_of_samples , num_users , time = '' , '' , '' , ''
19
+ lat_longs , num_studies_ebi , num_samples_ebi , img = '' , '' , '' , ''
36
20
37
- # set the key to expire in 24 hours, so that we limit the
38
- # number of times we have to go to the database to a reasonable
39
- # amount
40
- r_client . expire ( redis_lats_key , 86400 )
41
- r_client . expire ( redis_longs_key , 86400 )
21
+ # checking values from redis
22
+ portal = qiita_config . portal
23
+ keys = [
24
+ 'number_studies' , 'number_of_samples' , 'num_users' , 'lat_longs' ,
25
+ 'num_studies_ebi' , 'num_samples_ebi' , 'img' , 'time' ]
42
26
43
- pipe .execute ()
44
- else :
45
- # If we do have them, put the redis results into the same structure
46
- # that would come back from the database
47
- longs = [float (x ) for x in longs ]
48
- lats = [float (x ) for x in lats ]
49
- lat_longs = zip (lats , longs )
50
-
51
- # Get the number of studies
52
- num_studies = get_count ('qiita.study' )
53
-
54
- # Get the number of samples
55
- num_samples = len (lats )
56
-
57
- # Get the number of users
58
- num_users = get_count ('qiita.qiita_user' )
27
+ for k in keys :
28
+ redis_key = '%s:stats:%s' % (portal , k )
29
+ # retrieving dicts
30
+ if k == 'number_studies' :
31
+ number_studies = r_client .hgetall (redis_key )
32
+ elif k == 'number_of_samples' :
33
+ number_of_samples = r_client .hgetall (redis_key )
34
+ # single values
35
+ elif k == 'num_users' :
36
+ num_users = r_client .get (redis_key )
37
+ elif k == 'num_studies_ebi' :
38
+ num_studies_ebi = r_client .get (redis_key )
39
+ elif k == 'num_samples_ebi' :
40
+ num_samples_ebi = r_client .get (redis_key )
41
+ elif k == 'img' :
42
+ # not testing image!
43
+ img = r_client .get (redis_key )
44
+ elif k == 'time' :
45
+ # not testing image!
46
+ time = r_client .get (redis_key )
47
+ # storing tuples and single values
48
+ elif k == 'lat_longs' :
49
+ lat_longs = eval (r_client .get (redis_key ))
59
50
60
- callback ([num_studies , num_samples , num_users , lat_longs ])
51
+ callback ([number_studies , number_of_samples , num_users , lat_longs ,
52
+ num_studies_ebi , num_samples_ebi , img , time ])
61
53
62
54
@coroutine
63
55
@execute_as_transaction
64
56
def get (self ):
65
- num_studies , num_samples , num_users , lat_longs = \
66
- yield Task (self ._get_stats )
57
+ number_studies , number_of_samples , num_users , lat_longs , \
58
+ num_studies_ebi , num_samples_ebi , img , time \
59
+ = yield Task (self ._get_stats )
67
60
68
61
# Pull a random public study from the database
69
62
public_studies = Study .get_by_status ('public' )
@@ -79,8 +72,10 @@ def get(self):
79
72
random_study_id = study .id
80
73
81
74
self .render ('stats.html' ,
82
- num_studies = num_studies , num_samples = num_samples ,
83
- num_users = num_users , lat_longs = lat_longs ,
75
+ number_studies = number_studies ,
76
+ number_of_samples = number_of_samples , num_users = num_users ,
77
+ lat_longs = lat_longs , num_studies_ebi = num_studies_ebi ,
78
+ num_samples_ebi = num_samples_ebi , img = img , time = time ,
84
79
random_study_info = random_study_info ,
85
80
random_study_title = random_study_title ,
86
81
random_study_id = random_study_id )
0 commit comments