diff --git a/server.go b/server.go index 59d95b5..e2d0ccb 100644 --- a/server.go +++ b/server.go @@ -8,7 +8,6 @@ import ( "math" "net/http" "os" - "sync" "time" "database/sql" @@ -19,10 +18,7 @@ import ( "github.com/labstack/gommon/log" ) -var ( - stats = &sync.Map{} - ads []byte -) +const fraudThreshold = 7 type Template struct{ templates *template.Template } @@ -40,6 +36,7 @@ func main() { } defer db.Close() + var ads []byte adsFName := os.Getenv("ADS") if adsFName != "" { var err error @@ -49,7 +46,7 @@ func main() { } } - go persistStats(e.Logger, db, stats) + go persistStats(e.Logger, db) go cleanAccessRegistry(e.Logger) e.Renderer = &Template{templates: template.Must(template.ParseGlob("assets/templates/*.html"))} @@ -67,15 +64,8 @@ func main() { e.GET("/:id", func(c echo.Context) error { n, code := load(c, db) + defer incViews(n) n.prepare() - views := n.Views - if val, ok := stats.Load(n.ID); ok { - intVal, ok := val.(int) - if ok { - views = intVal - } - } - defer stats.Store(n.ID, views+1) if fraudelent(n) { n.Ads = mdTmplHTML(ads) } diff --git a/stats.go b/stats.go index 7bdcf05..44b3030 100644 --- a/stats.go +++ b/stats.go @@ -10,7 +10,9 @@ import ( const statsSavingInterval = 1 * time.Minute -func persistStats(logger echo.Logger, db *sql.DB, stats *sync.Map) { +var stats = &sync.Map{} + +func persistStats(logger echo.Logger, db *sql.DB) { for { time.Sleep(statsSavingInterval) tx, err := db.Begin() @@ -35,3 +37,14 @@ func persistStats(logger echo.Logger, db *sql.DB, stats *sync.Map) { } } } + +func incViews(n *Note) { + views := n.Views + if val, ok := stats.Load(n.ID); ok { + intVal, ok := val.(int) + if ok { + views = intVal + } + } + defer stats.Store(n.ID, views+1) +} diff --git a/storage.go b/storage.go index 8f0e9c8..6142e70 100644 --- a/storage.go +++ b/storage.go @@ -19,10 +19,7 @@ func init() { rand.Seed(time.Now().UnixNano()) } -const ( - idLength = 5 - fraudThreshold = 7 -) +const idLength = 5 type Note struct { ID, Title, Text, Password, DeprecatedPassword string