Browse Source

feat: added timer for uploads and removals to show how long it takes

document-upload-removal-layout-update
nic 7 months ago
parent
commit
38da0d751e
  1. 21
      internal/handlers/web/document_remove.go
  2. 14
      internal/handlers/web/documents.go

21
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 // BulkRemoveDocumentsHandler handles bulk removal of documents from multiple jobs
func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) { func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now()
if r.Method != http.MethodPost { if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return return
@ -485,6 +487,7 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) {
TotalFiles int TotalFiles int
SuccessCount int SuccessCount int
ErrorCount int ErrorCount int
Duration time.Duration
JobResults []struct { JobResults []struct {
JobID string JobID string
FilesFound int FilesFound int
@ -722,6 +725,12 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) {
// Wait for all jobs to complete // Wait for all jobs to complete
wg.Wait() wg.Wait()
// Calculate total duration
totalDuration := time.Since(startTime)
results.Duration = totalDuration
log.Printf("Document removal completed in %v", totalDuration)
// Generate HTML for results // Generate HTML for results
var resultHTML bytes.Buffer var resultHTML bytes.Buffer
@ -754,13 +763,19 @@ func BulkRemoveDocumentsHandler(w http.ResponseWriter, r *http.Request) {
resultHTML.WriteString("<div class=\"stat-label\">Files Processed</div>") resultHTML.WriteString("<div class=\"stat-label\">Files Processed</div>")
resultHTML.WriteString("</div>") resultHTML.WriteString("</div>")
// Duration stat
resultHTML.WriteString("<div class=\"stat-box\">")
resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-value\">%v</div>", totalDuration))
resultHTML.WriteString("<div class=\"stat-label\">Total Time</div>")
resultHTML.WriteString("</div>")
resultHTML.WriteString("</div>") // End of upload-stats resultHTML.WriteString("</div>") // End of upload-stats
// Add completion message // Add completion message with timing
if results.ErrorCount == 0 { if results.ErrorCount == 0 {
resultHTML.WriteString("<p>All documents were successfully removed from ServiceTrade!</p>") resultHTML.WriteString(fmt.Sprintf("<p>All documents were successfully removed from ServiceTrade in %v!</p>", totalDuration))
} else { } else {
resultHTML.WriteString("<p>Some documents failed to be removed. See details below.</p>") resultHTML.WriteString(fmt.Sprintf("<p>Some documents failed to be removed. Process completed in %v. See details below.</p>", totalDuration))
} }
resultHTML.WriteString("</div>") // End of upload-summary resultHTML.WriteString("</div>") // End of upload-summary

14
internal/handlers/web/documents.go

@ -166,6 +166,8 @@ func ProcessCSVHandler(w http.ResponseWriter, r *http.Request) {
// UploadDocumentsHandler handles document uploads to jobs // UploadDocumentsHandler handles document uploads to jobs
func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) { func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now()
session, ok := r.Context().Value(middleware.SessionKey).(*api.Session) session, ok := r.Context().Value(middleware.SessionKey).(*api.Session)
if !ok { if !ok {
http.Error(w, "Unauthorized", http.StatusUnauthorized) 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) results[result.JobID] = append(results[result.JobID], result)
} }
log.Printf("All results collected. Total: %d, Total bytes uploaded: %.2f MB", // Calculate total duration
resultsCount, float64(totalBytesUploaded)/(1024*1024)) 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 resultHTML bytes.Buffer
var totalSuccess, totalFailure int var totalSuccess, totalFailure int
@ -450,14 +454,14 @@ func UploadDocumentsHandler(w http.ResponseWriter, r *http.Request) {
resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box success-stat\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Successful Uploads</div></div>", totalSuccess)) resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box success-stat\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Successful Uploads</div></div>", totalSuccess))
resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box error-stat\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Failed Uploads</div></div>", totalFailure)) resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box error-stat\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Failed Uploads</div></div>", totalFailure))
resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Files Processed</div></div>", resultsCount)) resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box\"><div class=\"stat-value\">%d</div><div class=\"stat-label\">Files Processed</div></div>", resultsCount))
resultHTML.WriteString("</div>") resultHTML.WriteString(fmt.Sprintf("<div class=\"stat-box\"><div class=\"stat-value\">%v</div><div class=\"stat-label\">Total Time</div></div>", totalDuration))
if totalFailure == 0 && resultsCount > 0 { if totalFailure == 0 && resultsCount > 0 {
resultHTML.WriteString("<p>All documents were successfully uploaded to ServiceTrade!</p>") resultHTML.WriteString(fmt.Sprintf("<p>All documents were successfully uploaded to ServiceTrade in %v!</p>", totalDuration))
} else if resultsCount == 0 { } else if resultsCount == 0 {
resultHTML.WriteString("<p>No documents were processed for upload.</p>") resultHTML.WriteString("<p>No documents were processed for upload.</p>")
} else { } else {
resultHTML.WriteString("<p>Some documents failed to upload. See details below.</p>") resultHTML.WriteString(fmt.Sprintf("<p>Some documents failed to upload. Process completed in %v. See details below.</p>", totalDuration))
} }
resultHTML.WriteString("</div>") resultHTML.WriteString("</div>")

Loading…
Cancel
Save