github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/migration/v2_to_v3/cmd/decompress_docs/main.back (about) 1 // Script de décompression générale des documents. 2 // S'applique sur une base v3, et enlève la compression gzip 3 // des contenus. 4 package main 5 6 import ( 7 "bytes" 8 "compress/gzip" 9 "flag" 10 "fmt" 11 "io" 12 "log" 13 14 "github.com/benoitkugler/goACVE/server/core/rawdata" 15 "github.com/benoitkugler/goACVE/logs" 16 ) 17 18 func main() { 19 dev := flag.Bool("dev", true, "which DB to use") 20 flag.Parse() 21 22 logsDB := logs.DBProd 23 if *dev { 24 logsDB = logs.DBDev 25 } 26 27 fmt.Println("Connecting on", logsDB.Host, logsDB.Name) 28 29 db, err := rawdata.ConnectDB(logsDB) 30 if err != nil { 31 log.Fatal(err) 32 } 33 defer db.Close() 34 35 tx, err := db.Begin() 36 if err != nil { 37 log.Fatal(err) 38 } 39 40 var totalLengthCompressed, totalLengthUncompressed int 41 42 fmt.Println("Downloading documents...") 43 rds, err := rawdata.SelectAllContenuDocuments(tx) 44 if err != nil { 45 log.Fatal(err) 46 } 47 48 for i, contenu := range rds { 49 if i%5 == 0 { 50 fmt.Printf("\r Decompressing document %d / %d (%d %%) ...", i+1, len(rds), 100*(i+1)/len(rds)) 51 } 52 totalLengthCompressed += len(contenu.Contenu) 53 r, err := gzip.NewReader(bytes.NewReader(contenu.Contenu)) 54 if err != nil { 55 log.Fatal(err) 56 } 57 var uncompressed bytes.Buffer 58 _, err = io.Copy(&uncompressed, r) 59 if err != nil { 60 log.Fatal(err) 61 } 62 _ = r.Close() 63 64 totalLengthUncompressed += uncompressed.Len() 65 contenu.Contenu = uncompressed.Bytes() 66 67 _, err = tx.Exec("UPDATE contenu_documents SET contenu = $1 WHERE id_document = $2", contenu.Contenu, contenu.IdDocument) 68 if err != nil { 69 log.Fatal(err) 70 } 71 72 // les miniatures sont déjà décompressées 73 } 74 75 err = tx.Commit() 76 if err != nil { 77 log.Fatal(err) 78 } 79 80 fmt.Printf("Compression analysis: %f.03 %% (%d / %d)\n", 81 100*float32(totalLengthCompressed)/float32(totalLengthUncompressed), totalLengthCompressed/1000, totalLengthUncompressed/1000) 82 }