Reverted multithreaded compression due to not wanting to work
Me sad :c
This commit is contained in:
parent
675a8dafb3
commit
d51cf67997
1 changed files with 49 additions and 56 deletions
|
|
@ -2,6 +2,7 @@ package Compressor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
"bytes"
|
||||||
"compress/flate"
|
"compress/flate"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -14,83 +15,75 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateBakFile(fileName string, folderPath string, destinationPath string) string {
|
func CreateBakFile(fileName string, folderPath string, destinationPath string, backupName string) string {
|
||||||
logger := Logging.DetailedLogger("Compression", "CreateBakFile")
|
logger := Logging.DetailedLogger("Compression", "CreateBakFile")
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
compress(folderPath, &buf, backupName)
|
||||||
|
|
||||||
pathToFile := destinationPath + string(os.PathSeparator) + fileName + ".bak"
|
pathToFile := destinationPath + string(os.PathSeparator) + fileName + ".bak"
|
||||||
|
|
||||||
|
|
||||||
fileToWrite, err := os.OpenFile(pathToFile, os.O_CREATE|os.O_RDWR, os.FileMode(600))
|
fileToWrite, err := os.OpenFile(pathToFile, os.O_CREATE|os.O_RDWR, os.FileMode(600))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatal(err)
|
logger.Fatal(err)
|
||||||
}
|
}
|
||||||
compress(fileToWrite, folderPath)
|
|
||||||
|
|
||||||
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "File successfully written.", time.Now())
|
if _, err := io.Copy(fileToWrite, &buf); err != nil {
|
||||||
fileToWrite.Close()
|
logger.Fatal(err)
|
||||||
return pathToFile
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func compressFile(targetFile *os.File, file string, fi os.FileInfo, folderPath string) error {
|
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "File successfully written.", time.Now())
|
||||||
|
|
||||||
fileWriter, _ := gzip.NewWriterLevel(targetFile, flate.BestCompression)
|
|
||||||
tw := tar.NewWriter(fileWriter)
|
|
||||||
|
|
||||||
|
return fileName
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func compress(folderPath string, buf io.Writer, backupName string){
|
||||||
|
logger := Logging.DetailedLogger("Gzip", "compress")
|
||||||
|
|
||||||
|
zr, _ := gzip.NewWriterLevel(buf, flate.BestCompression)
|
||||||
|
tw := tar.NewWriter(zr)
|
||||||
|
|
||||||
|
fmt.Printf("[%s] Start compression...\n", filepath.Base(folderPath))
|
||||||
|
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Start compression", time.Now())
|
||||||
|
filepath.Walk(folderPath, func(file string, fi os.FileInfo, err error) error {
|
||||||
header, err := tar.FileInfoHeader(fi, file)
|
header, err := tar.FileInfoHeader(fi, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
logger.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
relPath, _ := filepath.Rel(filepath.Dir(folderPath), file)
|
relPath, _ := filepath.Rel(filepath.Dir(folderPath), file)
|
||||||
header.Name = relPath
|
|
||||||
|
|
||||||
|
header.Name = relPath
|
||||||
if err := tw.WriteHeader(header); err != nil {
|
if err := tw.WriteHeader(header); err != nil {
|
||||||
return err
|
logger.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fi.IsDir(){
|
if !fi.IsDir(){
|
||||||
data, err := os.Open(file)
|
data, err := os.Open(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
logger.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("[%s] Compressing: %s (%d bytes)\n", filepath.Base(folderPath) ,relPath, fi.Size())
|
fmt.Printf("[%s] Compressing: %s (%d bytes)\n", filepath.Base(folderPath) ,relPath, fi.Size())
|
||||||
if _, err := io.Copy(tw, data); err != nil {
|
if _, err := io.Copy(tw, data); err != nil {
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := tw.Close(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := fileWriter.Close(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func compress(targetFile *os.File, folderPath string) {
|
|
||||||
logger := Logging.DetailedLogger("Gzip", "compress")
|
|
||||||
|
|
||||||
fmt.Printf("[%s] Start compression...\n", filepath.Base(folderPath))
|
|
||||||
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Start compression", time.Now())
|
|
||||||
filepath.Walk(folderPath, func(file string, fi os.FileInfo, err error) error {
|
|
||||||
|
|
||||||
//This delay is to ensure the files don't get a sudden "file aleady close" error
|
|
||||||
time.Sleep(20 * time.Millisecond)
|
|
||||||
go func() {
|
|
||||||
err := compressFile(targetFile, file, fi, folderPath)
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
logger.Fatal(err)
|
||||||
}
|
}
|
||||||
}()
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
//Wait until all file writes all done
|
if err := tw.Close(); err != nil {
|
||||||
time.Sleep(5 * time.Second)
|
logger.Fatal(err)
|
||||||
fmt.Printf("[%s] Compression Done.\n", filepath.Base(folderPath))
|
}
|
||||||
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Compression complete.", time.Now())
|
|
||||||
|
if err := zr.Close(); err != nil {
|
||||||
|
logger.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fmt.Printf("[%s] Compression Done.\n", filepath.Base(folderPath))
|
||||||
|
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Compression complete.", time.Now())
|
||||||
}
|
}
|
||||||
Reference in a new issue