1010from codecov_auth .authentication .repo_auth import (
1111 GlobalTokenAuthentication ,
1212 OrgLevelTokenAuthentication ,
13+ OrgLevelTokenRepositoryAuth ,
1314 RepositoryLegacyTokenAuthentication ,
1415)
16+ from codecov_auth .models import OrganizationLevelToken
1517from core .models import Commit , Repository
1618from reports .models import CommitReport , ReportSession
19+ from services .analytics import AnalyticsService
1720from services .archive import ArchiveService , MinioEndpoints
1821from services .redis_configuration import get_redis_connection
1922from upload .helpers import dispatch_upload_task , validate_activated_repo
@@ -51,18 +54,21 @@ def perform_create(self, serializer: UploadSerializer):
5154 validate_activated_repo (repository )
5255 commit = self .get_commit (repository )
5356 report = self .get_report (commit )
57+ version = (
58+ serializer .validated_data ["version" ]
59+ if "version" in serializer .validated_data
60+ else None
61+ )
5462 log .info (
5563 "Request to create new upload" ,
5664 extra = dict (
5765 repo = repository .name ,
5866 commit = commit .commitid ,
59- cli_version = serializer .validated_data ["version" ]
60- if "version" in serializer .validated_data
61- else None ,
67+ cli_version = version ,
6268 ),
6369 )
64- if " version" in serializer . validated_data :
65- metrics .incr ("upload.cli." + f"{ serializer . validated_data [ ' version' ] } " )
70+ if version :
71+ metrics .incr ("upload.cli." + f"{ version } " )
6672 archive_service = ArchiveService (repository )
6773 instance : ReportSession = serializer .save (
6874 report_id = report .id ,
@@ -81,7 +87,7 @@ def perform_create(self, serializer: UploadSerializer):
8187 self .trigger_upload_task (repository , commit .commitid , instance , report )
8288 metrics .incr ("uploads.accepted" , 1 )
8389 self .activate_repo (repository )
84-
90+ self . send_analytics_data ( commit , instance , version )
8591 return instance
8692
8793 def list (
@@ -123,6 +129,38 @@ def activate_repo(self, repository):
123129 repository .deleted = False
124130 repository .save (update_fields = ["activated" , "active" , "deleted" , "updatestamp" ])
125131
132+ def send_analytics_data (self , commit : Commit , upload : ReportSession , version ):
133+ token = self .get_token (commit )
134+ analytics_upload_data = {
135+ "commit" : commit .commitid ,
136+ "branch" : commit .branch ,
137+ "pr" : commit .pullid ,
138+ "repo" : commit .repository .name ,
139+ "repository_name" : commit .repository .name ,
140+ "repository_id" : commit .repository .repoid ,
141+ "service" : commit .repository .service ,
142+ "build" : upload .build_code ,
143+ "build_url" : upload .build_url ,
144+ "flags" : "," .join (upload .flag_names ),
145+ "owner" : commit .repository .author .ownerid ,
146+ "token" : str (token ),
147+ "version" : version ,
148+ "uploader_type" : "CLI" ,
149+ }
150+ AnalyticsService ().account_uploaded_coverage_report (
151+ commit .repository .author .ownerid , analytics_upload_data
152+ )
153+
154+ def get_token (self , commit : Commit ):
155+ repo = commit .repository
156+ if isinstance (self .request .auth , OrgLevelTokenRepositoryAuth ):
157+ token = (
158+ OrganizationLevelToken .objects .filter (owner = repo .author ).first ().token
159+ )
160+ else :
161+ token = repo .upload_token
162+ return token
163+
126164 def get_repo (self ) -> Repository :
127165 try :
128166 repo = super ().get_repo ()
0 commit comments