From a5a32e7a317dd5cf156e52a71d7be432d0594bf7 Mon Sep 17 00:00:00 2001 From: Ben Morrison Date: Sat, 8 Jun 2019 01:04:38 -0400 Subject: split db-specific funcs into separate files --- svc/leveldb.go | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 svc/leveldb.go (limited to 'svc/leveldb.go') diff --git a/svc/leveldb.go b/svc/leveldb.go new file mode 100644 index 0000000..455d8b9 --- /dev/null +++ b/svc/leveldb.go @@ -0,0 +1,106 @@ +package svc // import "github.com/getwtxt/getwtxt/svc" + +import ( + "net" + "strings" + "time" + + "github.com/getwtxt/registry" + "github.com/syndtr/goleveldb/leveldb" +) + +type dbLevel struct { + db *leveldb.DB +} + +func (lvl dbLevel) push() error { + + twtxtCache.Mu.RLock() + var dbBasket = &leveldb.Batch{} + for k, v := range twtxtCache.Users { + + dbBasket.Put([]byte(k+"*Nick"), []byte(v.Nick)) + dbBasket.Put([]byte(k+"*URL"), []byte(v.URL)) + dbBasket.Put([]byte(k+"*IP"), []byte(v.IP.String())) + dbBasket.Put([]byte(k+"*Date"), []byte(v.Date)) + dbBasket.Put([]byte(k+"*RLen"), []byte(v.RLen)) + + for i, e := range v.Status { + rfc := i.Format(time.RFC3339) + dbBasket.Put([]byte(k+"*Status*"+rfc), []byte(e)) + } + } + twtxtCache.Mu.RUnlock() + + remoteRegistries.Mu.RLock() + for k, v := range remoteRegistries.List { + dbBasket.Put([]byte("remote*"+string(k)), []byte(v)) + } + remoteRegistries.Mu.RUnlock() + + confObj.Mu.Lock() + confObj.LastPush = time.Now() + confObj.Mu.Unlock() + + return lvl.db.Write(dbBasket, nil) +} + +func (lvl dbLevel) pull() { + + iter := lvl.db.NewIterator(nil, nil) + + for iter.Next() { + key := string(iter.Key()) + val := string(iter.Value()) + + split := strings.Split(key, "*") + urls := split[0] + field := split[1] + + if urls == "remote" { + remoteRegistries.Mu.Lock() + remoteRegistries.List = append(remoteRegistries.List, val) + remoteRegistries.Mu.Unlock() + continue + } + + data := registry.NewUser() + twtxtCache.Mu.RLock() + if _, ok := twtxtCache.Users[urls]; ok { + twtxtCache.Users[urls].Mu.RLock() + data = twtxtCache.Users[urls] + twtxtCache.Users[urls].Mu.RUnlock() + } + twtxtCache.Mu.RUnlock() + + data.Mu.Lock() + switch field { + case "IP": + data.IP = net.ParseIP(val) + case "Nick": + data.Nick = val + case "URL": + data.URL = val + case "RLen": + data.RLen = val + case "Date": + data.Date = val + case "Status": + thetime, err := time.Parse(time.RFC3339, split[2]) + errLog("", err) + data.Status[thetime] = val + } + data.Mu.Unlock() + + twtxtCache.Mu.Lock() + twtxtCache.Users[urls] = data + twtxtCache.Mu.Unlock() + } + + remoteRegistries.Mu.Lock() + remoteRegistries.List = dedupe(remoteRegistries.List) + remoteRegistries.Mu.Unlock() + + iter.Release() + errLog("Error while pulling DB into registry cache: ", iter.Error()) +} -- cgit 1.4.1-2-gfad0 749'>test_keyhandlers.h
blob: 4be429a91d591417adbf35092238eafe993c3bdf (plain) (blame)
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