Harmonize ETA logging
Change-Id: I64e330f2e80cfdc21699f790877af21fdd23f7f2
diff --git a/R/KorAPQuery.R b/R/KorAPQuery.R
index 5abd281..805d7d7 100644
--- a/R/KorAPQuery.R
+++ b/R/KorAPQuery.R
@@ -266,6 +266,20 @@
log_info(verbose, ", took ", res$meta$benchmark)
}
}
+
+ # Calculate and display ETA information on the same line if verbose and we have more than one query
+ if (verbose && total_queries > 1) {
+ eta_info <- calculate_eta(current_query, total_queries, start_time)
+ if (eta_info != "") {
+ elapsed_time <- as.numeric(difftime(Sys.time(), start_time, units = "secs"))
+ avg_time_per_query <- elapsed_time / current_query
+
+ # Add ETA info to the same line - remove the leading ". " for cleaner formatting
+ clean_eta_info <- sub("^\\. ", ". ", eta_info)
+ log_info(verbose, clean_eta_info)
+ }
+ }
+
log_info(verbose, "\n")
}
@@ -277,29 +291,6 @@
stringsAsFactors = FALSE
)
- # Calculate and display ETA information if verbose and we have more than one query
- if (verbose && total_queries > 1) {
- eta_info <- calculate_eta(current_query, total_queries, start_time)
- if (eta_info != "") {
- elapsed_time <- as.numeric(difftime(Sys.time(), start_time, units = "secs"))
- avg_time_per_query <- elapsed_time / current_query
-
- # Create progress display
- progress_display <- paste0(
- "Query ",
- sprintf(paste0("%", nchar(total_queries), "d"), current_query),
- "/",
- sprintf("%d", total_queries),
- " completed. Avg: ",
- sprintf("%.1f", avg_time_per_query),
- "s/query",
- eta_info
- )
-
- log_info(verbose, progress_display, "\n")
- }
- }
-
return(result)
})
@@ -568,9 +559,9 @@
} else {
total_pages
}
-
+
eta_info <- calculate_eta(current_page, total_pages_to_fetch, start_time)
-
+
# Extract timing information for display
time_per_page <- NA
if (!is.null(res$meta$benchmark) && is.character(res$meta$benchmark)) {
diff --git a/R/logging.R b/R/logging.R
index 47c7ed5..fb1dc98 100644
--- a/R/logging.R
+++ b/R/logging.R
@@ -90,31 +90,31 @@
#' @param window_size number of recent non-cached times to use for median calculation (default: 5)
#' @return list with eta_seconds, estimated_completion_time, and is_cached flag
#' @keywords internal
-calculate_sophisticated_eta <- function(individual_times, current_item, total_items,
+calculate_sophisticated_eta <- function(individual_times, current_item, total_items,
cache_threshold = 0.1, window_size = 5) {
if (current_item < 2) {
return(list(eta_seconds = NA, estimated_completion_time = NA, is_cached = FALSE))
}
-
+
# Get times up to current item
current_times <- individual_times[1:current_item]
current_time <- individual_times[current_item]
is_cached <- current_time < cache_threshold
-
+
# Use recent non-cached times for better ETA estimates
# Exclude very fast responses as likely cached
non_cached_times <- current_times[current_times >= cache_threshold]
-
+
if (length(non_cached_times) >= 1) {
# Use median of recent non-cached times for more stable estimates
recent_window <- min(window_size, length(non_cached_times))
recent_times <- tail(non_cached_times, recent_window)
time_per_item <- median(recent_times)
-
+
remaining_items <- total_items - current_item
eta_seconds <- time_per_item * remaining_items
estimated_completion_time <- Sys.time() + eta_seconds
-
+
return(list(
eta_seconds = eta_seconds,
estimated_completion_time = estimated_completion_time,
@@ -138,9 +138,9 @@
if (is.na(eta_seconds) || is.na(estimated_completion_time)) {
return("")
}
-
+
completion_time_str <- format(estimated_completion_time, "%Y-%m-%d %H:%M:%S")
- paste0(", ETA: ", format_duration(eta_seconds), " (", completion_time_str, ")")
+ paste0(". ETA: ", format_duration(eta_seconds), " (", completion_time_str, ")")
}
#' Get cache indicator string