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  }