From 38da0d751ee50636549d2e80f61c08b15f586da1 Mon Sep 17 00:00:00 2001 From: nic Date: Thu, 19 Jun 2025 14:43:46 -0400 Subject: [PATCH] feat: added timer for uploads and removals to show how long it takes --- internal/handlers/web/document_remove.go | 21 ++++++++++++++++++--- internal/handlers/web/documents.go | 14 +++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/internal/handlers/web/document_remove.go b/internal/handlers/web/document_remove.go index dc67787..8fd5400 100644 --- a/internal/handlers/web/document_remove.go +++ b/internal/handlers/web/document_remove.go @@ -415,6 +415,8 @@ func renderErrorTemplate(w http.ResponseWriter, templateName, errorMsg string, j // BulkRemoveDocumentsHandler handles bulk removal of documents from multiple jobs func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) { + startTime := time.Now() + if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return @@ -485,6 +487,7 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) { TotalFiles int SuccessCount int ErrorCount int + Duration time.Duration JobResults []struct { JobID string FilesFound int @@ -722,6 +725,12 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) { // Wait for all jobs to complete wg.Wait() + // Calculate total duration + totalDuration := time.Since(startTime) + results.Duration = totalDuration + + log.Printf("Document removal completed in %v", totalDuration) + // Generate HTML for results var resultHTML bytes.Buffer @@ -754,13 +763,19 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) { resultHTML.WriteString("
Files Processed
") resultHTML.WriteString("") + // Duration stat + resultHTML.WriteString("
") + resultHTML.WriteString(fmt.Sprintf("
%v
", totalDuration)) + resultHTML.WriteString("
Total Time
") + resultHTML.WriteString("
") + resultHTML.WriteString("") // End of upload-stats - // Add completion message + // Add completion message with timing if results.ErrorCount == 0 { - resultHTML.WriteString("

All documents were successfully removed from ServiceTrade!

") + resultHTML.WriteString(fmt.Sprintf("

All documents were successfully removed from ServiceTrade in %v!

", totalDuration)) } else { - resultHTML.WriteString("

Some documents failed to be removed. See details below.

") + resultHTML.WriteString(fmt.Sprintf("

Some documents failed to be removed. Process completed in %v. See details below.

", totalDuration)) } resultHTML.WriteString("") // End of upload-summary diff --git a/internal/handlers/web/documents.go b/internal/handlers/web/documents.go index 86b7c02..665e16b 100644 --- a/internal/handlers/web/documents.go +++ b/internal/handlers/web/documents.go @@ -166,6 +166,8 @@ func ProcessCSVHandler(w http.ResponseWriter, r *http.Request) { // UploadDocumentsHandler handles document uploads to jobs func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) { + startTime := time.Now() + session, ok := r.Context().Value(middleware.SessionKey).(*api.Session) if !ok { http.Error(w, "Unauthorized", http.StatusUnauthorized) @@ -428,8 +430,10 @@ func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) { results[result.JobID] = append(results[result.JobID], result) } - log.Printf("All results collected. Total: %d, Total bytes uploaded: %.2f MB", - resultsCount, float64(totalBytesUploaded)/(1024*1024)) + // Calculate total duration + totalDuration := time.Since(startTime) + log.Printf("All results collected. Total: %d, Total bytes uploaded: %.2f MB, Total time: %v", + resultsCount, float64(totalBytesUploaded)/(1024*1024), totalDuration) var resultHTML bytes.Buffer var totalSuccess, totalFailure int @@ -450,14 +454,14 @@ func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) { resultHTML.WriteString(fmt.Sprintf("
%d
Successful Uploads
", totalSuccess)) resultHTML.WriteString(fmt.Sprintf("
%d
Failed Uploads
", totalFailure)) resultHTML.WriteString(fmt.Sprintf("
%d
Files Processed
", resultsCount)) - resultHTML.WriteString("") + resultHTML.WriteString(fmt.Sprintf("
%v
Total Time
", totalDuration)) if totalFailure == 0 && resultsCount > 0 { - resultHTML.WriteString("

All documents were successfully uploaded to ServiceTrade!

") + resultHTML.WriteString(fmt.Sprintf("

All documents were successfully uploaded to ServiceTrade in %v!

", totalDuration)) } else if resultsCount == 0 { resultHTML.WriteString("

No documents were processed for upload.

") } else { - resultHTML.WriteString("

Some documents failed to upload. See details below.

") + resultHTML.WriteString(fmt.Sprintf("

Some documents failed to upload. Process completed in %v. See details below.

", totalDuration)) } resultHTML.WriteString("")