Provide a simplistic key value cache to reduce regexp usage
[pstop.git] / key_value_cache / key_value_cache.go
diff --git a/key_value_cache/key_value_cache.go b/key_value_cache/key_value_cache.go
new file mode 100644 (file)
index 0000000..e5881b6
--- /dev/null
@@ -0,0 +1,55 @@
+package key_value_cache
+
+import (
+       "errors"
+
+       "github.com/sjmudd/pstop/lib"
+)
+
+// provide a mapping from filename to table.schema etc
+type KeyValueCache struct {
+       cache                                            map[string]string
+       read_requests, served_from_cache, write_requests int
+}
+
+// create a new KeyValueCache entry
+func NewKeyValueCache() KeyValueCache {
+       lib.Logger.Println("KeyValueCache()")
+       var kvc KeyValueCache
+
+       return kvc
+}
+
+// return value if found
+func (kvc *KeyValueCache) Get(key string) (result string, err error) {
+       lib.Logger.Println("KeyValueCache.Get(", key, ")")
+       if kvc.cache == nil {
+               lib.Logger.Println("KeyValueCache.Get() kvc.cache is empty so enabling it")
+               kvc.cache = make(map[string]string)
+               kvc.read_requests = 0
+               kvc.served_from_cache = 0
+               kvc.write_requests = 0
+       }
+
+       kvc.read_requests++
+
+       if result, ok := kvc.cache[key]; ok {
+               kvc.served_from_cache++
+               lib.Logger.Println("Found: read_requests/servced_from_cache:", kvc.read_requests, kvc.served_from_cache)
+               return result, nil
+       } else {
+               lib.Logger.Println("Not found: read_requests/served_from_cache:", kvc.read_requests, kvc.served_from_cache)
+               return "", errors.New("Not found")
+       }
+}
+
+// write to cache and return value
+func (kvc *KeyValueCache) Put(key, value string) string {
+       lib.Logger.Println("KeyValueCache.Put(", key, ",", value, ")")
+       kvc.cache[key] = value
+       return value
+}
+
+func (kvc *KeyValueCache) Statistics() (int, int, int) {
+       return kvc.read_requests, kvc.served_from_cache, kvc.write_requests
+}