3232import com .tencent .cos .xml .exception .CosXmlClientException ;
3333import com .tencent .cos .xml .exception .CosXmlServiceException ;
3434import com .tencent .cos .xml .model .CosXmlRequest ;
35+ import com .tencent .cos .xml .model .object .BasePutObjectRequest ;
36+ import com .tencent .cos .xml .model .object .GetObjectBytesRequest ;
37+ import com .tencent .cos .xml .model .object .GetObjectRequest ;
3538import com .tencent .cos .xml .model .object .ObjectRequest ;
3639import com .tencent .cos .xml .transfer .TransferTaskMetrics ;
3740import com .tencent .cos .xml .utils .ThrowableUtils ;
@@ -231,21 +234,54 @@ public void reportError(String source, Exception e) {
231234 * @param request request
232235 */
233236 public void reportRequestSuccess (CosXmlRequest request ) {
234- reportRequestSuccess (request , null );
237+ reportRequestSuccess (request , false );
238+ }
239+ public void reportRequestSuccess (CosXmlRequest request , boolean internal ) {
240+ Map <String , String > extra = null ;
241+ if (request instanceof BasePutObjectRequest ){
242+ extra = Collections .singletonMap ("request_name" , "UploadTask" );
243+ } else if (request instanceof GetObjectRequest || request instanceof GetObjectBytesRequest ){
244+ extra = Collections .singletonMap ("request_name" , "DownloadTask" );
245+ } else if ("CopyObjectRequest" .equalsIgnoreCase (request .getClass ().getSimpleName ())){
246+ extra = Collections .singletonMap ("request_name" , "CopyTask" );
247+ }
248+ reportRequestSuccess (request , extra , internal );
235249 }
236250
237251 /**
238252 * 上报base_service事件 ClientException
239253 */
240254 public CosXmlClientException reportRequestClientException (CosXmlRequest request , QCloudClientException clientException ) {
241- return reportClientException (request , clientException , null );
255+ return reportRequestClientException (request , clientException , false );
256+ }
257+ public CosXmlClientException reportRequestClientException (CosXmlRequest request , QCloudClientException clientException , boolean internal ) {
258+ Map <String , String > extra = null ;
259+ if (request instanceof BasePutObjectRequest ){
260+ extra = Collections .singletonMap ("request_name" , "UploadTask" );
261+ } else if (request instanceof GetObjectRequest || request instanceof GetObjectBytesRequest ){
262+ extra = Collections .singletonMap ("request_name" , "DownloadTask" );
263+ } else if ("CopyObjectRequest" .equalsIgnoreCase (request .getClass ().getSimpleName ())){
264+ extra = Collections .singletonMap ("request_name" , "CopyTask" );
265+ }
266+ return reportClientException (request , clientException , extra , internal );
242267 }
243268
244269 /**
245270 * 上报base_service事件 ServiceException
246271 */
247272 public CosXmlServiceException reportRequestServiceException (CosXmlRequest request , QCloudServiceException serviceException ) {
248- return reportServiceException (request , serviceException , null );
273+ return reportRequestServiceException (request , serviceException , false );
274+ }
275+ public CosXmlServiceException reportRequestServiceException (CosXmlRequest request , QCloudServiceException serviceException , boolean internal ) {
276+ Map <String , String > extra = null ;
277+ if (request instanceof BasePutObjectRequest ){
278+ extra = Collections .singletonMap ("request_name" , "UploadTask" );
279+ } else if (request instanceof GetObjectRequest || request instanceof GetObjectBytesRequest ){
280+ extra = Collections .singletonMap ("request_name" , "DownloadTask" );
281+ } else if ("CopyObjectRequest" .equalsIgnoreCase (request .getClass ().getSimpleName ())){
282+ extra = Collections .singletonMap ("request_name" , "CopyTask" );
283+ }
284+ return reportServiceException (request , serviceException , extra , internal );
249285 }
250286
251287 /**
@@ -256,23 +292,23 @@ public CosXmlServiceException reportRequestServiceException(CosXmlRequest reques
256292 public void reportUploadTaskSuccess (CosXmlRequest request ) {
257293 // 只需要一个 PutObjectRequest 壳,带上 HttpTaskMetrics 信息
258294 reportRequestSuccess (request ,
259- Collections .singletonMap ("request_name" , "UploadTask" ));
295+ Collections .singletonMap ("request_name" , "UploadTask" ), false );
260296 }
261297
262298 /**
263299 * 上报cos_upload事件 ClientException
264300 */
265301 public void reportUploadTaskClientException (CosXmlRequest request , QCloudClientException clientException ) {
266302 reportClientException (request , clientException ,
267- createTransferExtra ("UploadTask" , request ));
303+ createTransferExtra ("UploadTask" , request ), false );
268304 }
269305
270306 /**
271307 * 上报cos_upload事件 ServiceException
272308 */
273309 public void reportUploadTaskServiceException (CosXmlRequest request , QCloudServiceException serviceException ) {
274310 reportServiceException (request , serviceException ,
275- createTransferExtra ("UploadTask" , request ));
311+ createTransferExtra ("UploadTask" , request ), false );
276312 }
277313
278314 /**
@@ -283,23 +319,23 @@ public void reportUploadTaskServiceException(CosXmlRequest request, QCloudServic
283319 public void reportDownloadTaskSuccess (CosXmlRequest request ) {
284320 // 只需要一个 GetObjectRequest 壳,带上 HttpTaskMetrics 信息
285321 reportRequestSuccess (request ,
286- Collections .singletonMap ("request_name" , "DownloadTask" ));
322+ Collections .singletonMap ("request_name" , "DownloadTask" ), false );
287323 }
288324
289325 /**
290326 * 上报cos_download事件 ClientException
291327 */
292328 public void reportDownloadTaskClientException (CosXmlRequest request , QCloudClientException clientException ) {
293329 reportClientException (request , clientException ,
294- createTransferExtra ("DownloadTask" , request ));
330+ createTransferExtra ("DownloadTask" , request ), false );
295331 }
296332
297333 /**
298334 * 上报cos_download事件 ServiceException
299335 */
300336 public void reportDownloadTaskServiceException (CosXmlRequest request , QCloudServiceException serviceException ) {
301337 reportServiceException (request , serviceException ,
302- createTransferExtra ("DownloadTask" , request ));
338+ createTransferExtra ("DownloadTask" , request ), false );
303339 }
304340
305341 /**
@@ -310,38 +346,36 @@ public void reportDownloadTaskServiceException(CosXmlRequest request, QCloudServ
310346 public void reportCopyTaskSuccess (CosXmlRequest request ) {
311347 // 只需要一个 CopyObjectRequest 壳,带上 HttpTaskMetrics 信息
312348 reportRequestSuccess (request ,
313- Collections .singletonMap ("request_name" , "CopyTask" ));
349+ Collections .singletonMap ("request_name" , "CopyTask" ), false );
314350 }
315351
316352 /**
317353 * 上报cos_copy事件 ClientException
318354 */
319355 public void reportCopyTaskClientException (CosXmlRequest request , CosXmlClientException clientException ) {
320356 reportClientException (request , clientException ,
321- createTransferExtra ("CopyTask" , request ));
357+ createTransferExtra ("CopyTask" , request ), false );
322358 }
323359
324360 /**
325361 * 上报cos_copy事件 ServiceException
326362 */
327363 public void reportCopyTaskServiceException (CosXmlRequest request , CosXmlServiceException serviceException ) {
328364 reportServiceException (request , serviceException ,
329- createTransferExtra ("CopyTask" , request ));
365+ createTransferExtra ("CopyTask" , request ), false );
330366 }
331367
332368 /**
333369 * 单个请求,整体任务 成功
334370 */
335- private void reportRequestSuccess (CosXmlRequest request , @ Nullable Map <String , String > extra ) {
371+ private void reportRequestSuccess (CosXmlRequest request , @ Nullable Map <String , String > extra , boolean internal ) {
336372 try {
337373 HttpTaskMetrics taskMetrics = request .getMetrics ();
338374
339375 // 添加 Request 参数
340376 Map <String , String > params = parseCosXmlRequestParams (request );
341377 // 添加基础参数
342378 params .putAll (getCommonParams ());
343- // 添加性能参数
344- params .putAll (parseHttpTaskMetricsParams (taskMetrics ));
345379 // 添加服务名称
346380 if (extra == null || !extra .containsKey ("request_name" )) {
347381 params .put ("request_name" , request .getClass ().getSimpleName ());
@@ -352,7 +386,11 @@ private void reportRequestSuccess(CosXmlRequest request, @Nullable Map<String, S
352386 if (extra != null ) {
353387 params .putAll (extra );
354388 }
355- QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
389+ // 添加性能参数
390+ params .putAll (parseHttpTaskMetricsParams (taskMetrics , params .get ("request_name" )));
391+ if (!internal ) {
392+ QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
393+ }
356394 } catch (Exception e ) {
357395 e .printStackTrace ();
358396 }
@@ -361,7 +399,7 @@ private void reportRequestSuccess(CosXmlRequest request, @Nullable Map<String, S
361399 /**
362400 * 上报客户端异常 单个请求,整体任务
363401 */
364- private CosXmlClientException reportClientException (CosXmlRequest request , QCloudClientException clientException , @ Nullable Map <String , String > extra ) {
402+ private CosXmlClientException reportClientException (CosXmlRequest request , QCloudClientException clientException , @ Nullable Map <String , String > extra , boolean internal ) {
365403 ReturnClientException returnClientException = getClientExceptionParams (clientException );
366404 try {
367405 if (isReport (returnClientException .exception )) {
@@ -373,8 +411,6 @@ private CosXmlClientException reportClientException(CosXmlRequest request, QClou
373411 params .putAll (getCommonParams ());
374412 // 添加错误信息
375413 params .putAll (returnClientException .params );
376- // 添加性能参数
377- params .putAll (parseHttpTaskMetricsParams (taskMetrics ));
378414 // 添加服务名称
379415 if (extra == null || !extra .containsKey ("request_name" )) {
380416 params .put ("request_name" , request .getClass ().getSimpleName ());
@@ -386,7 +422,11 @@ private CosXmlClientException reportClientException(CosXmlRequest request, QClou
386422 if (extra != null ) {
387423 params .putAll (extra );
388424 }
389- QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
425+ // 添加性能参数
426+ params .putAll (parseHttpTaskMetricsParams (taskMetrics , params .get ("request_name" )));
427+ if (!internal ) {
428+ QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
429+ }
390430 }
391431 } catch (Exception e ) {
392432 e .printStackTrace ();
@@ -397,7 +437,7 @@ private CosXmlClientException reportClientException(CosXmlRequest request, QClou
397437 /**
398438 * 上报服务端异常 单个请求,整体任务
399439 */
400- private CosXmlServiceException reportServiceException (CosXmlRequest request , QCloudServiceException serviceException , @ Nullable Map <String , String > extra ) {
440+ private CosXmlServiceException reportServiceException (CosXmlRequest request , QCloudServiceException serviceException , @ Nullable Map <String , String > extra , boolean internal ) {
401441 ReturnServiceException returnServiceException = getServiceExceptionParams (serviceException );
402442 try {
403443 if (isReport (returnServiceException .exception )) {
@@ -407,8 +447,6 @@ private CosXmlServiceException reportServiceException(CosXmlRequest request, QCl
407447 params .putAll (getCommonParams ());
408448 // 添加错误信息
409449 params .putAll (returnServiceException .params );
410- // 添加性能参数
411- params .putAll (parseHttpTaskMetricsParams (request .getMetrics ()));
412450 // 添加服务名称
413451 if (extra == null || !extra .containsKey ("request_name" )) {
414452 params .put ("request_name" , request .getClass ().getSimpleName ());
@@ -420,7 +458,11 @@ private CosXmlServiceException reportServiceException(CosXmlRequest request, QCl
420458 if (extra != null ) {
421459 params .putAll (extra );
422460 }
423- QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
461+ // 添加性能参数
462+ params .putAll (parseHttpTaskMetricsParams (request .getMetrics (), params .get ("request_name" )));
463+ if (!internal ) {
464+ QCloudTrackService .getInstance ().report (EVENT_CODE_QCLOUD_TRACK_COS_SDK , params );
465+ }
424466 }
425467 } catch (Exception e ){
426468 e .printStackTrace ();
@@ -431,7 +473,7 @@ private CosXmlServiceException reportServiceException(CosXmlRequest request, QCl
431473 /**
432474 * 获取http性能数据字段
433475 */
434- private Map <String , String > parseHttpTaskMetricsParams (@ Nullable HttpTaskMetrics taskMetrics ) {
476+ private Map <String , String > parseHttpTaskMetricsParams (@ Nullable HttpTaskMetrics taskMetrics , String requestName ) {
435477 Map <String , String > params = new HashMap <>();
436478
437479 if (taskMetrics == null ) {
@@ -449,13 +491,23 @@ private Map<String, String> parseHttpTaskMetricsParams(@Nullable HttpTaskMetrics
449491 params .put ("http_write_header" , String .valueOf (taskMetrics .writeRequestHeaderTookTime ()));
450492 params .put ("http_write_body" , String .valueOf (taskMetrics .writeRequestBodyTookTime ()));
451493 params .put ("http_full_time" , String .valueOf (taskMetrics .fullTaskTookTime ()));
452- params .put ("http_size" , String .valueOf (taskMetrics .requestBodyByteCount () + taskMetrics .responseBodyByteCount ()));
494+ if ("UploadTask" .equalsIgnoreCase (requestName ) || "CopyTask" .equalsIgnoreCase (requestName )){
495+ params .put ("http_size" , String .valueOf (taskMetrics .requestBodyByteCount ()));
496+ // 速度 每秒传输的数据大小 kb为单位
497+ params .put ("http_speed" , String .valueOf ((taskMetrics .requestBodyByteCount ()/1024d ) / taskMetrics .httpTaskFullTime ()));
498+ } else if ("DownloadTask" .equalsIgnoreCase (requestName )){
499+ params .put ("http_size" , String .valueOf (taskMetrics .responseBodyByteCount ()));
500+ // 速度 每秒传输的数据大小 kb为单位
501+ params .put ("http_speed" , String .valueOf ((taskMetrics .responseBodyByteCount ()/1024d ) / taskMetrics .httpTaskFullTime ()));
502+ } else {
503+ params .put ("http_size" , String .valueOf (taskMetrics .requestBodyByteCount () + taskMetrics .responseBodyByteCount ()));
504+ // 速度 每秒传输的数据大小 kb为单位
505+ params .put ("http_speed" , String .valueOf (((taskMetrics .requestBodyByteCount () + taskMetrics .responseBodyByteCount ())/1024d ) / taskMetrics .httpTaskFullTime ()));
506+ }
453507 params .put ("http_retry_times" , String .valueOf (taskMetrics .getRetryCount ()));
454508 params .put ("http_domain" , taskMetrics .getDomainName () != null ? taskMetrics .getDomainName () : "null" );
455509 params .put ("http_connect_ip" , taskMetrics .getConnectAddress () != null ? taskMetrics .getConnectAddress ().getHostAddress () : "null" );
456510 params .put ("http_dns_ips" , taskMetrics .getRemoteAddress () != null ? taskMetrics .getRemoteAddress ().toString () : "null" );
457- // 速度 每秒传输的数据大小 kb为单位
458- params .put ("http_speed" , String .valueOf (((taskMetrics .requestBodyByteCount () + taskMetrics .responseBodyByteCount ())/1024d ) / taskMetrics .httpTaskFullTime ()));
459511 return params ;
460512 }
461513
0 commit comments