24
24
#include < davix.hpp>
25
25
#include < sstream>
26
26
#include < unistd.h>
27
+ #include < list>
28
+ #include < iterator>
27
29
#include " copy_internal.hpp"
28
30
#include " delegation/delegation.hpp"
29
31
#include < utils/davix_logger_internal.hpp>
@@ -394,6 +396,12 @@ enum IPtype getIPv_type(char *text) {
394
396
return (type);
395
397
}
396
398
399
+ void logPerfmarker (const std::list<std::string>& lines)
400
+ {
401
+ std::ostringstream out;
402
+ std::copy (lines.begin (), lines.end (),std::ostream_iterator<std::string>(out, " \n " ));
403
+ DAVIX_SLOG (DAVIX_LOG_VERBOSE, DAVIX_LOG_GRID, " PerformanceMarker:\n {}" , out.str ());
404
+ }
397
405
398
406
void DavixCopyInternal::monitorPerformanceMarkers (Davix::HttpRequest *request,
399
407
Davix::DavixError **error)
@@ -404,15 +412,23 @@ void DavixCopyInternal::monitorPerformanceMarkers(Davix::HttpRequest *request,
404
412
405
413
PerformanceMarker holder;
406
414
PerformanceData performance;
415
+ std::list<std::string> perfmarkerLines;
407
416
time_t lastPerfCallback = time (NULL );
408
417
bool clearOutcome = false ;
409
418
410
419
while ((line_len = request->readLine (buffer, sizeof (buffer), &daverr)) > 0 && !daverr && !shouldCancel ())
411
420
{
412
421
buffer[line_len] = ' \0 ' ;
413
422
414
- if (line_len > 0 )
415
- DAVIX_SLOG (DAVIX_LOG_VERBOSE, DAVIX_LOG_GRID, " Received: {}" , buffer);
423
+ // Skip trailing whitespaces and newlines
424
+ p = buffer + line_len - 1 ;
425
+ while (p > buffer && isspace (*p))
426
+ --p;
427
+ *(p + 1 ) = ' \0 ' ;
428
+
429
+ if (line_len > 0 ) {
430
+ perfmarkerLines.emplace_back (buffer);
431
+ }
416
432
417
433
// Skip heading whitespaces
418
434
p = buffer;
@@ -456,30 +472,35 @@ void DavixCopyInternal::monitorPerformanceMarkers(Davix::HttpRequest *request,
456
472
this ->perfCallback (performance, this ->perfCallbackUdata );
457
473
lastPerfCallback = now;
458
474
}
475
+ logPerfmarker (perfmarkerLines);
476
+ perfmarkerLines.clear ();
459
477
}
460
478
else if (strncasecmp (" success" , p, 7 ) == 0 )
461
479
{
462
480
clearOutcome = true ;
463
481
request->discardBody (&daverr);
482
+ logPerfmarker (perfmarkerLines);
464
483
break ;
465
484
}
466
485
else if (strncasecmp (" aborted" , p, 7 ) == 0 )
467
486
{
468
487
clearOutcome = true ;
469
488
Davix::DavixError::setupError (error, COPY_SCOPE, StatusCode::Canceled,
470
489
" Transfer aborted in the remote end" );
490
+ logPerfmarker (perfmarkerLines);
471
491
break ;
472
492
}
473
493
else if (strncasecmp (" failed" , p, 6 ) == 0 || strncasecmp (" failure" , p, 7 ) == 0 )
474
494
{
475
495
clearOutcome = true ;
476
496
Davix::DavixError::setupError (error, COPY_SCOPE, StatusCode::RemoteError,
477
497
std::string (" Transfer " ) + p);
498
+ logPerfmarker (perfmarkerLines);
478
499
break ;
479
500
}
480
- else if (line_len> 0 )
501
+ else if (line_len > 0 )
481
502
{
482
- DAVIX_SLOG (DAVIX_LOG_WARNING , DAVIX_LOG_GRID, " Unknown performance marker, ignoring: {}" , buffer);
503
+ DAVIX_SLOG (DAVIX_LOG_DEBUG , DAVIX_LOG_GRID, " Unknown performance marker, ignoring: {}" , buffer);
483
504
}
484
505
}
485
506
0 commit comments