github.com/cima-lexis/wundererr@v0.0.0-20211005094629-75ae72005cfa/wundarchive/run.go (about) 1 package wundarchive 2 3 import ( 4 "archive/tar" 5 "bytes" 6 "compress/gzip" 7 "fmt" 8 "io" 9 "os" 10 "path/filepath" 11 "strings" 12 ) 13 14 func PrepareArchive(date string) error { 15 archiveFile := fmt.Sprintf("data/wundarchive/wund-%s.tar.gz", date) 16 17 f, err := os.Open(archiveFile) 18 if err != nil { 19 return err 20 } 21 defer f.Close() 22 23 gzf, err := gzip.NewReader(f) 24 if err != nil { 25 return err 26 } 27 28 tarReader := tar.NewReader(gzf) 29 30 result := make(map[string]string) 31 32 for { 33 header, err := tarReader.Next() 34 35 if err == io.EOF { 36 break 37 } 38 39 if err != nil { 40 return err 41 } 42 43 name := header.Name 44 45 if header.Typeflag == tar.TypeDir { 46 // Make Folder 47 //err = os.MkdirAll(fpath, os.ModePerm) 48 //if err != nil { 49 // return err 50 //} 51 52 continue 53 } 54 55 baseName := filepath.Base(name) 56 ext := filepath.Ext(baseName) 57 stationID := baseName[0 : len(baseName)-len(ext)] 58 59 buf := new(bytes.Buffer) 60 61 _, err = buf.ReadFrom(tarReader) 62 if err != nil { 63 return err 64 } 65 66 stationNewData := buf.String() 67 stationNewData = strings.ReplaceAll(stationNewData, "\n", "") 68 69 stationData, ok := result[stationID] 70 if !ok { 71 stationData = "{\"observations\": [" + stationNewData 72 result[stationID] = stationData 73 } else { 74 result[stationID] = stationData + "," + stationNewData 75 } 76 77 /* 78 // Make File 79 if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil { 80 return err 81 } 82 83 outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.FileMode(0644)) 84 if err != nil { 85 return err 86 } 87 */ 88 89 //_, err = io.Copy(outFile, tarReader) 90 //if err != nil { 91 // return err 92 //} 93 // Close the file without defer to close before next iteration of loop 94 //outFile.Close() 95 fmt.Fprintln(os.Stderr, stationID) 96 } 97 98 cacheDir := fmt.Sprintf("data/cache/%s", date) 99 100 // Make File 101 if err = os.MkdirAll(cacheDir, os.ModePerm); err != nil { 102 return err 103 } 104 105 for stationID, data := range result { 106 cacheFile := fmt.Sprintf("data/cache/%s/%s.json", date, stationID) 107 data += "]}" 108 109 outFile, err := os.OpenFile(cacheFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.FileMode(0644)) 110 if err != nil { 111 return err 112 } 113 114 _, err = outFile.WriteString(data) 115 if err != nil { 116 return err 117 } 118 119 outFile.Close() 120 } 121 122 return nil 123 }