[API] add playlist stats

This commit is contained in:
Simon 2023-11-19 14:00:27 +07:00
parent e74c26fe36
commit a466c02304
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
3 changed files with 46 additions and 0 deletions

View File

@ -167,6 +167,34 @@ class Channel(AggBase):
return response return response
class Playlist(AggBase):
"""get playlist stats"""
name = "playlist_stats"
path = "ta_playlist/_search"
data = {
"size": 0,
"aggs": {
"playlist_count": {"value_count": {"field": "playlist_id"}},
"playlist_active": {"terms": {"field": "playlist_active"}},
"playlist_subscribed": {"terms": {"field": "playlist_subscribed"}},
},
}
def process(self):
"""process aggregation"""
aggregations = self.get()
response = {"doc_count": aggregations["playlist_count"].get("value")}
for bucket in aggregations["playlist_active"]["buckets"]:
key = f"active_{bucket['key_as_string']}"
response.update({key: bucket.get("doc_count")})
for bucket in aggregations["playlist_subscribed"]["buckets"]:
key = f"subscribed_{bucket['key_as_string']}"
response.update({key: bucket.get("doc_count")})
return response
class WatchProgress(AggBase): class WatchProgress(AggBase):
"""get watch progress""" """get watch progress"""

View File

@ -161,6 +161,11 @@ urlpatterns = [
views.StatChannelView.as_view(), views.StatChannelView.as_view(),
name="api-stats-channel", name="api-stats-channel",
), ),
path(
"stats/playlist/",
views.StatPlaylistView.as_view(),
name="api-stats-playlist",
),
path( path(
"stats/watch/", "stats/watch/",
views.StatWatchProgress.as_view(), views.StatWatchProgress.as_view(),

View File

@ -4,6 +4,7 @@ from api.src.aggs import (
BiggestChannel, BiggestChannel,
Channel, Channel,
DownloadHist, DownloadHist,
Playlist,
Video, Video,
WatchProgress, WatchProgress,
) )
@ -1171,6 +1172,18 @@ class StatChannelView(ApiBaseView):
return Response(Channel().process()) return Response(Channel().process())
class StatPlaylistView(ApiBaseView):
"""resolves to /api/stats/playlist/
GET: return playlist stats
"""
def get(self, request):
"""get stats"""
# pylint: disable=unused-argument
return Response(Playlist().process())
class StatWatchProgress(ApiBaseView): class StatWatchProgress(ApiBaseView):
"""resolves to /api/stats/watchprogress/ """resolves to /api/stats/watchprogress/
GET: return watch/unwatch progress stats GET: return watch/unwatch progress stats