Remove time.Ticker and adjust polling mechanism
[pstop.git] / key_value_cache / key_value_cache.go
1 package key_value_cache
2
3 import (
4         "errors"
5
6         "github.com/sjmudd/pstop/lib"
7 )
8
9 // provide a mapping from filename to table.schema etc
10 type KeyValueCache struct {
11         cache                                            map[string]string
12         read_requests, served_from_cache, write_requests int
13 }
14
15 // create a new KeyValueCache entry
16 func NewKeyValueCache() KeyValueCache {
17         lib.Logger.Println("KeyValueCache()")
18         var kvc KeyValueCache
19
20         return kvc
21 }
22
23 // return value if found
24 func (kvc *KeyValueCache) Get(key string) (result string, err error) {
25         lib.Logger.Println("KeyValueCache.Get(", key, ")")
26         if kvc.cache == nil {
27                 lib.Logger.Println("KeyValueCache.Get() kvc.cache is empty so enabling it")
28                 kvc.cache = make(map[string]string)
29                 kvc.read_requests = 0
30                 kvc.served_from_cache = 0
31                 kvc.write_requests = 0
32         }
33
34         kvc.read_requests++
35
36         if result, ok := kvc.cache[key]; ok {
37                 kvc.served_from_cache++
38                 lib.Logger.Println("Found: read_requests/servced_from_cache:", kvc.read_requests, kvc.served_from_cache)
39                 return result, nil
40         } else {
41                 lib.Logger.Println("Not found: read_requests/served_from_cache:", kvc.read_requests, kvc.served_from_cache)
42                 return "", errors.New("Not found")
43         }
44 }
45
46 // write to cache and return value
47 func (kvc *KeyValueCache) Put(key, value string) string {
48         lib.Logger.Println("KeyValueCache.Put(", key, ",", value, ")")
49         kvc.cache[key] = value
50         return value
51 }
52
53 func (kvc *KeyValueCache) Statistics() (int, int, int) {
54         return kvc.read_requests, kvc.served_from_cache, kvc.write_requests
55 }