2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
37 func NewUtils() *Utils {
38 b := Config.GetString("controls.symptomdata.baseDir")
40 b = "/tmp/symptomdata/"
48 func (u *Utils) FileExists(f string) bool {
50 return err == nil || os.IsExist(err)
53 func (u *Utils) CreateDir(path string) error {
54 if u.FileExists(path) {
57 err := os.MkdirAll(path, os.ModePerm)
61 os.Chmod(path, os.ModePerm)
65 func (u *Utils) DeleteFile(fileName string) {
69 func (u *Utils) AddFileToZip(zipWriter *zip.Writer, filePath string, filename string) error {
70 fileToZip, err := os.Open(filename)
74 defer fileToZip.Close()
76 info, err := fileToZip.Stat()
81 header, err := zip.FileInfoHeader(info)
86 header.Name = strings.TrimPrefix(filename, filePath)
87 header.Method = zip.Deflate
89 writer, err := zipWriter.CreateHeader(header)
94 _, err = io.Copy(writer, fileToZip)
99 func (u *Utils) ZipFiles(newZipFile *os.File, filePath string, files []string) error {
100 defer newZipFile.Close()
101 zipWriter := zip.NewWriter(newZipFile)
102 defer zipWriter.Close()
103 for _, file := range files {
104 if err := u.AddFileToZip(zipWriter, filePath, file); err != nil {
112 func (u *Utils) ZipFilesToTmpFile(baseDir string, tmpfilename string, fileList []string) (string, error) {
114 tmpFile, err := ioutil.TempFile("", tmpfilename)
116 return "", fmt.Errorf("Failed to create a tmp file: %w", err)
118 err = u.ZipFiles(tmpFile, baseDir, fileList)
120 os.Remove(tmpFile.Name())
121 return "", fmt.Errorf("Failed to zip the files: %w", err)
123 return tmpFile.Name(), nil
126 func (u *Utils) GetFileFromZip(file *zip.File, filePath string) (string, error) {
127 filename := filepath.Join(filePath, file.Name)
129 if file.FileInfo().IsDir() {
130 os.MkdirAll(filename, os.ModePerm)
134 if err := os.MkdirAll(filepath.Dir(filename), os.ModePerm); err != nil {
135 return "", fmt.Errorf("mkdir failed %s", filepath.Dir(filename))
138 dstFile, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
140 return "", fmt.Errorf("openfile failed %s", filename)
142 defer dstFile.Close()
144 fileInArchive, err := file.Open()
146 return "", fmt.Errorf("zip file open failed %s", file.Name)
148 defer fileInArchive.Close()
150 if _, err := io.Copy(dstFile, fileInArchive); err != nil {
151 return "", fmt.Errorf("copy failed %s -> %s", file.Name, filename)
157 func (u *Utils) UnZipFiles(zippedFile string, filePath string) ([]string, error) {
159 zipReader, err := zip.OpenReader(zippedFile)
161 return retval, fmt.Errorf("Failed to open zip reader: %w", err)
163 defer zipReader.Close()
165 //fmt.Printf("Reading zipfile: %s\n", zippedFile)
166 for _, file := range zipReader.File {
167 fname, err := u.GetFileFromZip(file, filePath)
169 return retval, fmt.Errorf("Failed to unzip the files: %w", err)
172 retval = append(retval, fname)
178 func (u *Utils) FetchFiles(filePath string, fileList []string) []string {
179 files, err := ioutil.ReadDir(filePath)
181 fmt.Printf("ioutil.ReadDir failed: %+v\n", err)
184 for _, file := range files {
186 fileList = append(fileList, filepath.Join(filePath, file.Name()))
188 fileList = u.FetchFiles(filepath.Join(filePath, file.Name()), fileList)
194 func (u *Utils) WriteToFile(fileName string, data string) error {
195 f, err := os.Create(fileName)
199 Logger.Error("Unable to create file %s': %+v", fileName, err)
201 _, err := io.WriteString(f, data)
203 Logger.Error("Unable to write to file '%s': %+v", fileName, err)
204 u.DeleteFile(fileName)