Skip to content

Commit 536eaca

Browse files
authored
BITMAKER-3543 Stats module merging (#210)
* BITMAKER-3465 Stats module: Apply pagination to jobs per day in estela (#204) * Added spiders endpoint to global stats and modified the stats serializers schema * Fixed issues with api generation, changed some schema responses and updated viewsets names * Added jobs action method to spiders viewset * Added the integration in frontend with the backend, disabled the expandable feature on the stats table * Disabling expandable row on stats table section * Fix issues mentioned on my reviewer's comments
1 parent ec08db0 commit 536eaca

37 files changed

+2890
-789
lines changed

estela-api/api/serializers/stats.py

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from datetime import timedelta
12
from rest_framework import serializers
2-
3+
from api.serializers.spider import SpiderSerializer
4+
from api.serializers.job import SpiderJobSerializer
35
from core.models import SpiderJob
46

57

@@ -55,30 +57,68 @@ class StatsSerializer(serializers.Serializer):
5557
jobs = JobsStatsSerializer(required=False)
5658
pages = PagesStatsSerializer()
5759
items_count = serializers.IntegerField(default=0)
58-
runtime = serializers.FloatField(default=0.0)
60+
runtime = serializers.DurationField(default=timedelta(hours=0, minutes=0))
5961
status_codes = StatusCodesStatsSerializer()
60-
success_rate = serializers.FloatField(default=0.0)
62+
success_rate = serializers.FloatField(default=0.0, required=False)
6163
logs = LogsStatsSerializer()
62-
coverage = CoverageStatsSerializer()
64+
coverage = CoverageStatsSerializer(required=False)
6365

6466

65-
class JobsMetadataSerializer(serializers.ModelSerializer):
66-
class Meta:
67-
model = SpiderJob
68-
fields = ("jid", "spider", "job_status")
69-
67+
class SpiderJobStatsSerializer(SpiderJobSerializer):
68+
stats = StatsSerializer()
7069

71-
class GetJobsStatsSerializer(serializers.Serializer):
72-
jid = serializers.IntegerField(default=0)
73-
spider = serializers.IntegerField(default=0)
74-
stats = StatsSerializer(required=False)
7570

71+
class SpiderJobStatsSerializer(SpiderJobSerializer):
72+
stats = StatsSerializer()
7673

77-
class GlobalStatsSerializer(serializers.Serializer):
74+
class Meta:
75+
model = SpiderJob
76+
fields = (
77+
"jid",
78+
"spider",
79+
"created",
80+
"name",
81+
"lifespan",
82+
"total_response_bytes",
83+
"item_count",
84+
"request_count",
85+
"args",
86+
"env_vars",
87+
"tags",
88+
"job_status",
89+
"cronjob",
90+
"data_expiry_days",
91+
"data_status",
92+
"stats",
93+
)
94+
95+
96+
class ProjectStatsSerializer(serializers.Serializer):
7897
date = serializers.DateField()
7998
stats = StatsSerializer()
80-
jobs_metadata = JobsMetadataSerializer(many=True)
8199

82100

83-
class SpidersJobsStatsSerializer(GlobalStatsSerializer):
101+
class SpidersStatsSerializer(ProjectStatsSerializer):
84102
pass
103+
104+
105+
class SpidersPaginationSerializer(serializers.Serializer):
106+
count = serializers.IntegerField()
107+
next = serializers.HyperlinkedIdentityField(
108+
view_name="project-stats", allow_null=True
109+
)
110+
previous = serializers.HyperlinkedIdentityField(
111+
view_name="project-stats", allow_null=True
112+
)
113+
results = SpiderSerializer(many=True)
114+
115+
116+
class JobsPaginationSerializer(serializers.Serializer):
117+
count = serializers.IntegerField()
118+
next = serializers.HyperlinkedIdentityField(
119+
view_name="project-stats", allow_null=True
120+
)
121+
previous = serializers.HyperlinkedIdentityField(
122+
view_name="project-stats", allow_null=True
123+
)
124+
results = SpiderJobStatsSerializer(many=True)

estela-api/api/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
)
5151
router.register(
5252
prefix=r"stats/(?P<pid>[0-9a-z-]+)",
53-
viewset=stats_views.GlobalStatsViewSet,
54-
basename="global-stats",
53+
viewset=stats_views.ProjectStatsViewSet,
54+
basename="project-stats",
5555
)
5656
router.register(
5757
prefix=r"stats/(?P<pid>[0-9a-z-]+)/spider/(?P<sid>\d+)",

estela-api/api/views/notification.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ class NotificationViewSet(BaseViewSet, viewsets.ModelViewSet):
1818
def get_queryset(self):
1919
if self.request is None:
2020
return Notification.objects.none()
21-
return Notification.objects.filter(user=self.request.user).order_by("-activity__created")
21+
return Notification.objects.filter(user=self.request.user).order_by(
22+
"-activity__created"
23+
)
2224

2325
@swagger_auto_schema(
2426
request_body=NotificationUpdateSerializer,

0 commit comments

Comments
 (0)