func RestAPI()

in nimo-shake/full-sync/syncer.go [200:240]


func RestAPI() {
	type FullSyncInfo struct {
		Progress             string            `json:"progress"`                     // synced_collection_number / total_collection_number
		TotalCollection      int               `json:"total_collection_number"`      // total collection
		FinishedCollection   int               `json:"finished_collection_number"`   // finished
		ProcessingCollection int               `json:"processing_collection_number"` // in processing
		WaitCollection       int               `json:"wait_collection_number"`       // wait start
		CollectionMetric     map[string]string `json:"collection_metric"`            // collection_name -> process
	}

	utils.FullSyncHttpApi.RegisterAPI("/progress", nimo.HttpGet, func([]byte) interface{} {
		ret := FullSyncInfo{
			CollectionMetric: make(map[string]string),
		}

		metricNsMapLock.Lock()
		defer metricNsMapLock.Unlock()

		ret.TotalCollection = len(metricNsMap)
		for ns, collectionMetric := range metricNsMap {
			ret.CollectionMetric[ns] = collectionMetric.String()
			switch collectionMetric.CollectionStatus {
			case utils.StatusWaitStart:
				ret.WaitCollection += 1
			case utils.StatusProcessing:
				ret.ProcessingCollection += 1
			case utils.StatusFinish:
				ret.FinishedCollection += 1
			}
		}

		if ret.TotalCollection == 0 {
			ret.Progress = "-%"
		} else {
			ret.Progress = fmt.Sprintf("%.2f%%", float64(ret.FinishedCollection)/float64(ret.TotalCollection)*100)
		}

		return ret
	})

}