@@ -158,6 +158,9 @@ def _get_addr_minute_feed_dicts(data: list, addresses: list):
158
158
for item in data :
159
159
if item [0 ] != addr :
160
160
continue
161
+ # SPLIT MINUTES OUT HERE FOR EVENTUAL DEDUPE...
162
+ # SPLIT MINUTES OUT HERE FOR EVENTUAL DEDUPE...
163
+ # SPLIT MINUTES OUT HERE FOR EVENTUAL DEDUPE...
161
164
minutes = str (item [1 ]).rsplit (":" , 1 )[0 ].strip ()
162
165
feed = item [2 ].strip ()
163
166
addr_minute_values = helpers .update_dict (
@@ -195,9 +198,11 @@ def _process_json_report(
195
198
days_in_range = minutes_in_range / helpers .MINUTES_DAY
196
199
counts = {}
197
200
for addr , value in addr_minute_values .items ():
198
- total_mins = len (set ( value ) )
201
+ total_mins = len (value )
199
202
average_mins = total_mins / len (set (feeds ))
200
203
license_name , stake = _get_license_and_stake (address_data , addr )
204
+ feeds_sorted = addr_feed_values [addr ]
205
+ feeds_sorted .sort ()
201
206
counts [addr ] = {
202
207
"license" : license_name ,
203
208
"stake" : stake ,
@@ -206,8 +211,7 @@ def _process_json_report(
206
211
"total_mins_in_date_range" : minutes_in_range ,
207
212
"number_of_feeds_collected" : len (set (addr_feed_values [addr ])),
208
213
"feeds_count" : [
209
- f"{ key } : { value } "
210
- for key , value in Counter (addr_feed_values [addr ]).items ()
214
+ f"{ key } : { value } " for key , value in Counter (feeds_sorted ).items ()
211
215
],
212
216
}
213
217
report = {}
@@ -222,19 +226,29 @@ def _process_json_report(
222
226
223
227
224
228
@helpers .timeit
225
- def get_participants_counts_date_range (
229
+ async def get_participants_counts_date_range (
226
230
app : FastAPI , date_start : str , date_end : str
227
231
) -> dict :
228
232
"""Return participants report by date range."""
233
+
229
234
data = _get_participant_data_by_date_range (app , date_start , date_end )
230
235
feeds , addresses = _get_unique_feeds (data )
231
236
logger .info ("no feeds: '%s'" , len (feeds ))
232
237
logger .info ("no addresses: '%s'" , len (feeds ))
233
238
addr_minute_values , addr_feed_values = _get_addr_minute_feed_dicts (data , addresses )
234
- addr_minute_values = helpers .dedupe_dicts (addr_minute_values )
239
+
240
+ # Remove dedupe for now, and look at all minute values we receive
241
+ # to perform a full count.
242
+ #
243
+ # `addr_minute_values`` is a dict ordered by stake key, with a list
244
+ # of feed+minutes for the era of participation as the value.
245
+ #
246
+ # addr_minute_values = helpers.dedupe_dicts(addr_minute_values)
247
+
235
248
logger .info ("retrieving data from kupo" )
236
249
address_data = _get_basic_addr_data (app .state .kupo_url , app .state .kupo_port )
237
250
logger .info ("processing json report" )
251
+
238
252
report = _process_json_report (
239
253
address_data , date_start , date_end , addr_minute_values , addr_feed_values , feeds
240
254
)
@@ -260,7 +274,7 @@ def _get_participant_data_by_date_range(
260
274
return res
261
275
262
276
263
- def generate_participant_count_csv (report : dict ) -> str :
277
+ async def generate_participant_count_csv (report : dict ) -> str :
264
278
"""Convert JSON data into a CSV for ease of use."""
265
279
266
280
max_possible = report .get ("max_possible_data_points" )
@@ -283,8 +297,11 @@ def generate_participant_count_csv(report: dict) -> str:
283
297
value ,
284
298
stake_addr ,
285
299
)
286
- continue
287
- stake = humanize .intcomma (int (value .get ("stake" , 0 ))).replace ("," , "" )
300
+ license_no = "deregistered"
301
+ try :
302
+ stake = humanize .intcomma (int (value .get ("stake" , 0 ))).replace ("," , "" )
303
+ except TypeError :
304
+ stake = 0
288
305
total_data_points = value .get ("total_data_points" , 0 )
289
306
average_per_feed = value .get ("average_mins_collecting_per_feed" , 0 )
290
307
total_collected = value .get ("number_of_feeds_collected" , 0 )
@@ -387,7 +404,7 @@ async def get_locations_stake_key(app: FastAPI) -> list:
387
404
"""
388
405
)
389
406
except mariadb .Error :
390
- return "zero collectors online"
407
+ return {}
391
408
392
409
res = list (cursor )
393
410
cursor .close ()
0 commit comments