/
initialize.go
85 lines (77 loc) · 1.81 KB
/
initialize.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package models
import (
"encoding/json"
"fmt"
"github.com/asdine/storm"
bolt "go.etcd.io/bbolt"
"github.com/Depado/goploader/server/database"
"github.com/Depado/goploader/server/logger"
)
// Initialize initializes the buckets and
func Initialize() error {
var err error
if err = database.DB.Init(&Resource{}); err != nil {
logger.Fatal("server", "Couldn't initialize bucket", err)
}
Migrate()
if err = S.Load(); err != nil {
switch err {
case storm.ErrNotFound:
if err = S.Evaluate(); err != nil {
return err
}
default:
return err
}
}
S.Info()
logger.Debug("server", "Done Initialize on statistics object")
return err
}
// Migrate migrates the old data format to the new one
func Migrate() {
var err error
type us struct {
TotalSize uint64
TotalFiles uint64
CurrentSize uint64
CurrentFiles uint64
}
var ss us
if err = database.DB.Get("statistics", "main", &ss); err == nil {
S.CurrentFiles = ss.CurrentFiles
S.CurrentSize = ss.CurrentSize
S.TotalFiles = ss.TotalFiles
S.TotalSize = ss.TotalSize
if err = S.Save(); err != nil {
logger.Err("server", "Couldn't migrate old stats", err)
return
}
logger.Info("server", "Had to migrate old stats")
database.DB.Delete("statistics", "main")
database.DB.Drop("statistics")
}
var rr []Resource
var r Resource
err = database.DB.Bolt.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("resources"))
if b == nil {
return fmt.Errorf("no bucket")
}
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
if err = json.Unmarshal(v, &r); err == nil {
r.UnixDeleteAt = r.DeleteAt.Unix()
rr = append(rr, r)
}
}
return nil
})
if err == nil {
for _, r := range rr {
database.DB.Save(&r)
}
logger.Info("server", "Had to migrate old resources")
database.DB.Drop("resources")
}
}