| package apidAnalytics |
| |
| import ( |
| _ "fmt" |
| "io/ioutil" |
| "os" |
| "path/filepath" |
| "time" |
| ) |
| |
| var ( |
| retriesMap map[string]int |
| ) |
| |
| //TODO: make sure that this instance gets initialized only once since we dont want multiple upload manager tickers running |
| func initUploadManager() { |
| |
| retriesMap = make(map[string]int) |
| |
| // TODO: add a way to make sure that this go routine is always running |
| go func() { |
| ticker := time.NewTicker(time.Millisecond * config.GetDuration(analyticsUploadInterval) * 1000) |
| log.Debugf("Intialized upload manager to check for staging directory") |
| defer ticker.Stop() // Ticker will keep running till go routine is running i.e. till application is running |
| |
| for t := range ticker.C { |
| files, err := ioutil.ReadDir(localAnalyticsStagingDir) |
| |
| if err != nil { |
| log.Errorf("Cannot read directory %s: ", localAnalyticsStagingDir) |
| } |
| |
| for _, file := range files { |
| log.Debugf("t: %s , file: %s", t, file.Name()) |
| if file.IsDir() { |
| handleUploadDirStatus(file, uploadDir(file)) |
| } |
| } |
| } |
| }() |
| |
| } |
| |
| func uploadDir(file os.FileInfo) bool { |
| // TODO: handle upload to UAP file by file |
| return false |
| } |
| |
| func handleUploadDirStatus(file os.FileInfo, status bool) { |
| completePath := filepath.Join(localAnalyticsStagingDir, file.Name()) |
| if status { |
| os.RemoveAll(completePath) |
| // remove key if exists from retry map after a successful upload |
| delete(retriesMap, file.Name()) |
| } else { |
| retriesMap[file.Name()] = retriesMap[file.Name()] + 1 |
| if retriesMap[file.Name()] > maxRetries { |
| log.Errorf("Max Retires exceeded for folder: %s", completePath) |
| failedDirPath := filepath.Join(localAnalyticsFailedDir, file.Name()) |
| err := os.Rename(completePath, failedDirPath) |
| if err != nil { |
| log.Errorf("Cannot move directory :%s to failed folder", file.Name()) |
| } |
| // remove key from retry map once it reaches allowed max failed attempts |
| delete(retriesMap, file.Name()) |
| } |
| } |
| } |