github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/uploadtask.go (about)

     1  /*
     2   * Copyright 2018 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     3   */
     4  
     5  package govcd
     6  
     7  import (
     8  	"fmt"
     9  	"time"
    10  )
    11  
    12  type UploadTask struct {
    13  	uploadProgress *mutexedProgress
    14  	*Task
    15  	uploadError *error
    16  }
    17  
    18  // Creates wrapped Task which is dedicated for upload functionality and
    19  // provides additional functionality to monitor upload progress.
    20  func NewUploadTask(task *Task, uploadProgress *mutexedProgress, uploadError *error) *UploadTask {
    21  	return &UploadTask{
    22  		uploadProgress,
    23  		task,
    24  		uploadError,
    25  	}
    26  }
    27  
    28  func (uploadTask *UploadTask) GetUploadProgress() string {
    29  	return fmt.Sprintf("%.2f", uploadTask.uploadProgress.LockedGet())
    30  }
    31  
    32  func (uploadTask *UploadTask) ShowUploadProgress() error {
    33  	fmt.Printf("Waiting...")
    34  
    35  	for {
    36  		if *uploadTask.uploadError != nil {
    37  			return *uploadTask.uploadError
    38  		}
    39  
    40  		fmt.Printf("\rUpload progress %.2f%%", uploadTask.uploadProgress.LockedGet())
    41  		if uploadTask.uploadProgress.LockedGet() == 100.00 {
    42  			fmt.Println()
    43  			break
    44  		}
    45  		// Upload may be cancelled by user on GUI manually, detect task status
    46  		if err := uploadTask.Refresh(); err != nil {
    47  			return err
    48  		}
    49  		if uploadTask.Task.Task.Status != "queued" && uploadTask.Task.Task.Status != "preRunning" && uploadTask.Task.Task.Status != "running" {
    50  			fmt.Println()
    51  			break
    52  		}
    53  		time.Sleep(1 * time.Second)
    54  	}
    55  	return nil
    56  }
    57  
    58  func (uploadTask *UploadTask) GetUploadError() error {
    59  	return *uploadTask.uploadError
    60  }