github.com/microsoft/moc@v0.17.1/pkg/status/status.go (about)

     1  // Copyright (c) Microsoft Corporation
     2  // Licensed under the Apache v2.0 license.
     3  package status
     4  
     5  import (
     6  	"fmt"
     7  	"strconv"
     8  	"time"
     9  
    10  	proto "github.com/golang/protobuf/proto"
    11  	common "github.com/microsoft/moc/rpc/common"
    12  )
    13  
    14  // InitStatus
    15  func InitStatus() *common.Status {
    16  	return &common.Status{
    17  		Health:             &common.Health{},
    18  		ProvisioningStatus: &common.ProvisionStatus{},
    19  		LastError:          &common.Error{},
    20  		Version:            GenerateVersion(),
    21  		DownloadStatus:     &common.DownloadStatus{},
    22  		ValidationStatus:   &common.ValidationStatus{},
    23  	}
    24  }
    25  
    26  // SetError
    27  func SetError(s *common.Status, err error) {
    28  	if err != nil {
    29  		s.LastError.Message = fmt.Sprintf("%+v", err)
    30  	} else {
    31  		s.LastError.Message = "" // Clear the error
    32  	}
    33  }
    34  
    35  // SetHealth
    36  func SetHealth(s *common.Status, hState common.HealthState, err ...error) {
    37  	s.Health.PreviousState = s.Health.CurrentState
    38  	s.Health.CurrentState = hState
    39  	if len(err) > 0 {
    40  		SetError(s, err[0])
    41  	}
    42  }
    43  
    44  func IsHealthStateMissing(s *common.Status) bool {
    45  	hstatus := s.GetHealth().GetCurrentState()
    46  	return (hstatus == common.HealthState_MISSING)
    47  }
    48  
    49  func IsDeleted(s *common.Status) bool {
    50  	return (IsProvisionStatus(s, common.ProvisionState_DELETED) ||
    51  		IsProvisionStatus(s, common.ProvisionState_DEPROVISIONED))
    52  }
    53  
    54  func IsProvisionStatus(s *common.Status, pState common.ProvisionState) bool {
    55  	return s.ProvisioningStatus.CurrentState == pState
    56  }
    57  
    58  // SetProvisionStatus
    59  func SetProvisionStatus(s *common.Status, pState common.ProvisionState, err ...error) {
    60  	s.ProvisioningStatus.PreviousState = s.ProvisioningStatus.CurrentState
    61  	s.ProvisioningStatus.CurrentState = pState
    62  	if len(err) > 0 {
    63  		SetError(s, err[0])
    64  	}
    65  }
    66  
    67  // GenerateVersion
    68  func GenerateVersion() *common.Version {
    69  	return &common.Version{
    70  		Number: strconv.FormatInt(time.Now().UnixNano(), 10),
    71  	}
    72  }
    73  
    74  // GetProvisioningState string
    75  func GetProvisioningState(status *common.ProvisionStatus) *string {
    76  	stateString := status.GetCurrentState().String()
    77  	return &stateString
    78  }
    79  
    80  // SetDownloadStatus
    81  func SetDownloadStatus(s *common.Status, dProgressPercentage, dDownloadSizeInBytes, dFileSizeInBytes int64, err ...error) {
    82  	s.DownloadStatus.ProgressPercentage = dProgressPercentage
    83  	s.DownloadStatus.DownloadSizeInBytes = dDownloadSizeInBytes
    84  	s.DownloadStatus.FileSizeInBytes = dFileSizeInBytes
    85  	if len(err) > 0 {
    86  		SetError(s, err[0])
    87  	}
    88  }
    89  
    90  func SetValidationStatus(s *common.Status, validationState []*common.ValidationState) {
    91  	s.ValidationStatus = new(common.ValidationStatus)
    92  	s.ValidationStatus.ValidationState = validationState
    93  }
    94  
    95  func GetValidationStatus(s *common.Status) []*common.ValidationState {
    96  	return s.GetValidationStatus().GetValidationState()
    97  }
    98  
    99  // GetStatuses - converts status to map
   100  func GetStatuses(status *common.Status) map[string]*string {
   101  	statuses := map[string]*string{}
   102  	pstate := status.GetProvisioningStatus().String()
   103  	statuses["ProvisionState"] = &pstate
   104  	hstate := status.GetHealth().String()
   105  	statuses["HealthState"] = &hstate
   106  	estate := status.GetLastError().String()
   107  	statuses["Error"] = &estate
   108  	version := status.GetVersion().Number
   109  	statuses["Version"] = &version
   110  	dstate := status.GetDownloadStatus().String()
   111  	statuses["DownloadStatus"] = &dstate
   112  	return statuses
   113  }
   114  
   115  // GetFromStatuses - parses the map to status
   116  func GetFromStatuses(statuses map[string]*string) (status *common.Status) {
   117  	status = &common.Status{}
   118  	if val, ok := statuses["ProvisionState"]; ok {
   119  		ps := new(common.ProvisionStatus)
   120  		proto.UnmarshalText(*val, ps)
   121  		status.ProvisioningStatus = ps
   122  	}
   123  	if val, ok := statuses["HealthState"]; ok {
   124  		ps := new(common.Health)
   125  		proto.UnmarshalText(*val, ps)
   126  		status.Health = ps
   127  	}
   128  	if val, ok := statuses["Error"]; ok {
   129  		ps := new(common.Error)
   130  		proto.UnmarshalText(*val, ps)
   131  		status.LastError = ps
   132  	}
   133  	if val, ok := statuses["DownloadStatus"]; ok {
   134  		ps := new(common.DownloadStatus)
   135  		proto.UnmarshalText(*val, ps)
   136  		status.DownloadStatus = ps
   137  	}
   138  
   139  	return
   140  }