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
})
}