Skip to content

Commit 43f1f68

Browse files
committed
Improve logging of PerformanceMarkers:
- Sanitize marker line in order to remove trailing whitespace - Group marker lines and print them all at once - Reduce from warning to debug logging scope unrecognized marker lines
1 parent c099329 commit 43f1f68

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

src/modules/copy/copy.cpp

+25-4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include <davix.hpp>
2525
#include <sstream>
2626
#include <unistd.h>
27+
#include <list>
28+
#include <iterator>
2729
#include "copy_internal.hpp"
2830
#include "delegation/delegation.hpp"
2931
#include <utils/davix_logger_internal.hpp>
@@ -394,6 +396,12 @@ enum IPtype getIPv_type(char *text) {
394396
return(type);
395397
}
396398

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+
}
397405

398406
void DavixCopyInternal::monitorPerformanceMarkers(Davix::HttpRequest *request,
399407
Davix::DavixError **error)
@@ -404,15 +412,23 @@ void DavixCopyInternal::monitorPerformanceMarkers(Davix::HttpRequest *request,
404412

405413
PerformanceMarker holder;
406414
PerformanceData performance;
415+
std::list<std::string> perfmarkerLines;
407416
time_t lastPerfCallback = time(NULL);
408417
bool clearOutcome = false;
409418

410419
while ((line_len = request->readLine(buffer, sizeof(buffer), &daverr)) > 0 && !daverr && !shouldCancel())
411420
{
412421
buffer[line_len] = '\0';
413422

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+
}
416432

417433
// Skip heading whitespaces
418434
p = buffer;
@@ -456,30 +472,35 @@ void DavixCopyInternal::monitorPerformanceMarkers(Davix::HttpRequest *request,
456472
this->perfCallback(performance, this->perfCallbackUdata);
457473
lastPerfCallback = now;
458474
}
475+
logPerfmarker(perfmarkerLines);
476+
perfmarkerLines.clear();
459477
}
460478
else if (strncasecmp("success", p, 7) == 0)
461479
{
462480
clearOutcome = true;
463481
request->discardBody(&daverr);
482+
logPerfmarker(perfmarkerLines);
464483
break;
465484
}
466485
else if (strncasecmp("aborted", p, 7) == 0)
467486
{
468487
clearOutcome = true;
469488
Davix::DavixError::setupError(error, COPY_SCOPE, StatusCode::Canceled,
470489
"Transfer aborted in the remote end");
490+
logPerfmarker(perfmarkerLines);
471491
break;
472492
}
473493
else if (strncasecmp("failed", p, 6) == 0 || strncasecmp("failure", p, 7) == 0)
474494
{
475495
clearOutcome = true;
476496
Davix::DavixError::setupError(error, COPY_SCOPE, StatusCode::RemoteError,
477497
std::string("Transfer ") + p);
498+
logPerfmarker(perfmarkerLines);
478499
break;
479500
}
480-
else if(line_len> 0)
501+
else if (line_len > 0)
481502
{
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);
483504
}
484505
}
485506

0 commit comments

Comments
 (0)