Skip to content

Commit

Permalink
WIP on storm
Browse files Browse the repository at this point in the history
  • Loading branch information
Depado committed Oct 14, 2017
1 parent 9b2d085 commit 4ac829d
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 74 deletions.
19 changes: 3 additions & 16 deletions server/models/resources.go
Expand Up @@ -11,7 +11,6 @@ import (
"path"
"time"

"github.com/boltdb/bolt"
"github.com/dchest/uniuri"
"github.com/gin-gonic/gin"

Expand Down Expand Up @@ -139,21 +138,9 @@ func (r Resource) Delete() error {
if err = database.DB.DeleteStruct(&r); err != nil {
return err
}
err = database.DB.Update(func(tx *bolt.Tx) error {
if err = tx.Bucket([]byte("resources")).Delete([]byte(r.Key)); err != nil {
return err
}
S.CurrentFiles--
S.CurrentSize -= uint64(r.Size)
var data []byte
if data, err = S.Encode(); err != nil {
return err
}
return tx.Bucket([]byte("statistics")).Put([]byte("main"), data)
})
if err != nil {
return err
}
S.CurrentFiles--
S.CurrentSize -= uint64(r.Size)
database.DB.Save(&S)
err = os.Remove(path.Join(conf.C.UploadDir, r.Key))
logger.Debug("server", "Done Delete on Resource", r.Key)
logger.Debug("server", fmt.Sprintf("Serving %d (%s) files", S.CurrentFiles, utils.HumanBytes(S.CurrentSize)))
Expand Down
82 changes: 29 additions & 53 deletions server/models/statistics.go
@@ -1,10 +1,9 @@
package models

import (
"encoding/json"
"fmt"

"github.com/boltdb/bolt"
"github.com/asdine/storm"

"github.com/Depado/goploader/server/database"
"github.com/Depado/goploader/server/logger"
Expand All @@ -13,71 +12,48 @@ import (

// Statistics is the struct representing the server statistics
type Statistics struct {
TotalSize uint64
TotalFiles uint64
CurrentSize uint64
CurrentFiles uint64
ID int
TotalSize uint64 `json:"total_size"`
TotalFiles uint64 `json:"total_files"`
CurrentSize uint64 `json:"current_size"`
CurrentFiles uint64 `json:"current_files"`
}

// S is the exported main statistics structure
var S Statistics

// Save writes the Resource to the bucket
func (s Statistics) Save() error {
logger.Debug("server", "Started Save on statistics object")
// Initialize initializes the buckets if necessary
func Initialize() error {
var err error
var data []byte
var cfiles uint64
var csize uint64
var rs []Resource

if data, err = s.Encode(); err != nil {
return err
if err = database.DB.Init(&Resource{}); err != nil {
logger.Fatal("server", "Couldn't initialize bucket", err)
}
err = database.DB.Update(func(tx *bolt.Tx) error {
return tx.Bucket([]byte("statistics")).Put([]byte("main"), data)
})
logger.Debug("server", "Done Save on statistics object")
return err
}

// Initialize initializes the buckets if necessary
func Initialize() error {
if err := database.DB.Init(&Resource{}); err != nil {
if err = database.DB.Init(&Statistics{}); err != nil {
logger.Fatal("server", "Couldn't initialize bucket", err)
}
logger.Debug("server", "Started Initialize on statistics object")
var cfiles uint64
var csize uint64
var err error

// err = database.DB.View(func(tx *bolt.Tx) error {
// S.Decode(tx.Bucket([]byte("statistics")).Get([]byte("main")))
// return tx.Bucket([]byte("resources")).ForEach(func(k, v []byte) error {
// r := &Resource{}
// if err = r.Decode(v); err != nil {
// return err
// }
// csize += uint64(r.Size)
// cfiles++
// return nil
// })
// })
if err != nil {
logger.Err("server", "Could not initialize statistics")
return err
if err = database.DB.One("ID", 0, &S); err != nil {
if err == storm.ErrNotFound {
if err = database.DB.All(&rs); err != nil {
if err == storm.ErrNotFound {
return nil
}
return err
}
for _, r := range rs {
S.CurrentFiles++
S.CurrentSize += uint64(r.Size)
}
} else {
return err
}
}
S.CurrentFiles = cfiles
S.CurrentSize = csize
logger.Info("server", fmt.Sprintf("Total %d (%s)", S.TotalFiles, utils.HumanBytes(S.TotalSize)))
logger.Info("server", fmt.Sprintf("Current %d (%s)", cfiles, utils.HumanBytes(csize)))
logger.Debug("server", "Done Initialize on statistics object")
return err
}

// Encode encodes a Resource to JSON
func (s Statistics) Encode() ([]byte, error) {
return json.Marshal(s)
}

// Decode decodes a JSON struct to Resource
func (s *Statistics) Decode(data []byte) error {
return json.Unmarshal(data, s)
}
11 changes: 6 additions & 5 deletions server/monitoring/monitoring.go
Expand Up @@ -35,7 +35,6 @@ func Monit() {
func FindAndDelete() {
var err error
now := time.Now()
var sizeRemoved uint64

var rs []models.Resource
if err = database.DB.Select(q.Lt("DeleteAt", now)).Find(&rs); err != nil {
Expand All @@ -49,12 +48,14 @@ func FindAndDelete() {
for _, r := range rs {
if err = os.Remove(path.Join(conf.C.UploadDir, r.Key)); err != nil {
logger.Err("monitoring", "While deleting file (skipped)", err)
}
if err = database.DB.DeleteStruct(&r); err != nil {
logger.Err("monitoring", "While deleting entry", err)
} else {
sizeRemoved += uint64(r.Size)
if err = database.DB.DeleteStruct(&r); err != nil {
logger.Err("monitoring", "While deleting entry", err)
}
models.S.CurrentSize -= uint64(r.Size)
models.S.CurrentFiles--
}
database.DB.Save(&models.S)
}
// err = database.DB.Update(func(tx *bolt.Tx) error {
// b := tx.Bucket([]byte("resources"))
Expand Down

0 comments on commit 4ac829d

Please sign in to comment.