From f146c0ae9109233cb6f0c40975264afed2703599 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 14 Feb 2020 10:21:48 +0100 Subject: [PATCH] Include only local content in nodeinfo stats, added downloads count --- api/funkwhale_api/instance/nodeinfo.py | 1 + api/funkwhale_api/instance/stats.py | 11 ++++++++--- api/tests/instance/test_nodeinfo.py | 2 ++ api/tests/instance/test_stats.py | 7 ++++--- changes/changelog.d/nodeinfo.enhancement | 1 + 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 changes/changelog.d/nodeinfo.enhancement diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py index 579b74fe4..6c86c9b2b 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -87,6 +87,7 @@ def get(): data["metadata"]["usage"] = { "favorites": {"tracks": {"total": statistics["track_favorites"]}}, "listenings": {"total": statistics["listenings"]}, + "downloads": {"total": statistics["downloads"]}, } if not auth_required: data["metadata"]["knownNodesListUrl"] = federation_utils.full_url( diff --git a/api/funkwhale_api/instance/stats.py b/api/funkwhale_api/instance/stats.py index 50f69da84..923a1dadb 100644 --- a/api/funkwhale_api/instance/stats.py +++ b/api/funkwhale_api/instance/stats.py @@ -17,6 +17,7 @@ def get(): "artists": get_artists(), "track_favorites": get_track_favorites(), "listenings": get_listenings(), + "downloads": get_downloads(), "music_duration": get_music_duration(), } @@ -43,15 +44,19 @@ def get_track_favorites(): def get_tracks(): - return models.Track.objects.count() + return models.Track.objects.local().count() def get_albums(): - return models.Album.objects.count() + return models.Album.objects.local().count() def get_artists(): - return models.Artist.objects.count() + return models.Artist.objects.local().count() + + +def get_downloads(): + return models.Track.objects.aggregate(d=Sum("downloads_count"))["d"] or 0 def get_music_duration(): diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index c124910e5..04bdfe6f5 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -27,6 +27,7 @@ def test_nodeinfo_dump(preferences, mocker, avatar): "track_favorites": 5, "music_duration": 6, "listenings": 7, + "downloads": 42, } mocker.patch("funkwhale_api.instance.stats.get", return_value=stats) @@ -61,6 +62,7 @@ def test_nodeinfo_dump(preferences, mocker, avatar): "usage": { "favorites": {"tracks": {"total": stats["track_favorites"]}}, "listenings": {"total": stats["listenings"]}, + "downloads": {"total": stats["downloads"]}, }, "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS, "allowList": {"enabled": False, "domains": None}, diff --git a/api/tests/instance/test_stats.py b/api/tests/instance/test_stats.py index 255e60d13..5c45f8a75 100644 --- a/api/tests/instance/test_stats.py +++ b/api/tests/instance/test_stats.py @@ -34,17 +34,17 @@ def test_get_track_favorites(mocker): def test_get_tracks(mocker): - mocker.patch("funkwhale_api.music.models.Track.objects.count", return_value=42) + mocker.patch("funkwhale_api.music.models.TrackQuerySet.count", return_value=42) assert stats.get_tracks() == 42 def test_get_albums(mocker): - mocker.patch("funkwhale_api.music.models.Album.objects.count", return_value=42) + mocker.patch("funkwhale_api.music.models.AlbumQuerySet.count", return_value=42) assert stats.get_albums() == 42 def test_get_artists(mocker): - mocker.patch("funkwhale_api.music.models.Artist.objects.count", return_value=42) + mocker.patch("funkwhale_api.music.models.ArtistQuerySet.count", return_value=42) assert stats.get_artists() == 42 @@ -57,6 +57,7 @@ def test_get(mocker): "track_favorites", "listenings", "music_duration", + "downloads", ] [ mocker.patch.object(stats, "get_{}".format(k), return_value=i) diff --git a/changes/changelog.d/nodeinfo.enhancement b/changes/changelog.d/nodeinfo.enhancement new file mode 100644 index 000000000..3b9daa487 --- /dev/null +++ b/changes/changelog.d/nodeinfo.enhancement @@ -0,0 +1 @@ +Include only local content in nodeinfo stats, added downloads count