Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/lib/fake/backend/fake_download_counts.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import 'dart:io';

import 'package:gcloud/storage.dart';
import 'package:pub_dev/service/download_counts/compute_30_days_total_counts.dart';
import 'package:pub_dev/service/download_counts/computations.dart';
import 'package:pub_dev/shared/configuration.dart';
import 'package:pub_dev/shared/utils.dart';

Expand Down
2 changes: 1 addition & 1 deletion app/lib/service/download_counts/backend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'dart:convert';
import 'package:gcloud/service_scope.dart' as ss;
import 'package:gcloud/storage.dart';
import 'package:googleapis/storage/v1.dart';
import 'package:pub_dev/service/download_counts/compute_30_days_total_counts.dart';
import 'package:pub_dev/service/download_counts/computations.dart';
import 'package:pub_dev/service/download_counts/download_counts.dart';
import 'package:pub_dev/service/download_counts/models.dart';
import 'package:pub_dev/service/entrypoint/analyzer.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,29 @@ Future<void> upload30DaysTotal(Map<String, int> counts) async {
await uploadBytesWithRetry(reportsBucket, downloadCounts30DaysTotalsFileName,
jsonUtf8Encoder.convert(counts));
}

Future<({List<int> weeklyPoints, DateTime? newestDate})> computeWeeklyDownloads(
String package) async {
final weeklyPoints = List.filled(52, 0);
final countData =
await downloadCountsBackend.lookupDownloadCountData(package);
if (countData == null) {
return (weeklyPoints: <int>[], newestDate: null);
}

final totals = countData!.totalCounts;

var sum = 0;
for (int i = 0; i < 52 * 7; i++) {
if (totals[i] < 0) {
// There is no more available data.
break;
}
sum += totals[i];
if ((i + 1) % 7 == 0) {
weeklyPoints[(i ~/ 7)] = sum;
sum = 0;
}
}
return (weeklyPoints: weeklyPoints, newestDate: countData.newestDate!);
}
2 changes: 1 addition & 1 deletion app/lib/tool/neat_task/pub_dev_tasks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import 'dart:io';
import 'package:gcloud/service_scope.dart' as ss;
import 'package:logging/logging.dart';
import 'package:neat_periodic_task/neat_periodic_task.dart';
import 'package:pub_dev/service/download_counts/compute_30_days_total_counts.dart';
import 'package:pub_dev/service/download_counts/computations.dart';

import '../../account/backend.dart';
import '../../account/consent_backend.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:basics/basics.dart';
import 'package:gcloud/storage.dart';
import 'package:pub_dev/fake/backend/fake_download_counts.dart';
import 'package:pub_dev/service/download_counts/backend.dart';
import 'package:pub_dev/service/download_counts/compute_30_days_total_counts.dart';
import 'package:pub_dev/service/download_counts/computations.dart';
import 'package:pub_dev/shared/configuration.dart';
import 'package:test/test.dart';

Expand Down Expand Up @@ -119,5 +119,48 @@ void main() {
expect(downloadCountsBackend.lookup30DaysTotalCounts('baz'), 150);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bax'), isNull);
});

testWithProfile('compute weekly', fn: () async {
final pkg = 'foo';
final date = DateTime.parse('1986-02-16');
final versionsCounts = {
'1.0.1': 2,
'2.0.0-alpha': 2,
'2.0.0': 2,
'2.1.0': 2,
'3.1.0': 2,
'4.0.0-0': 2,
'6.1.0': 2,
};
final versionsCounts2 = {
'1.0.1': 3,
'2.0.0-alpha': 3,
'2.0.0': 3,
'2.1.0': 3,
'3.1.0': 3,
'4.0.0-0': 3,
'6.1.0': 3,
};

for (var i = 0; i < 7 * 20; i++) {
await downloadCountsBackend.updateDownloadCounts(
pkg, versionsCounts, date.addCalendarDays(i));
}

for (var i = 7 * 20; i < 7 * 40; i++) {
await downloadCountsBackend.updateDownloadCounts(
pkg, versionsCounts2, date.addCalendarDays(i));
}

final res = await computeWeeklyDownloads(pkg);

final expectedList = List.from(List.filled(20, 147))
..addAll(List.filled(20, 98))
..addAll(List.filled(12, 0));
final expectedNewstDate = date.addCalendarDays(7 * 40 - 1);

expect(res.weeklyPoints, expectedList);
expect(res.newestDate, expectedNewstDate);
});
});
}
Loading