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 }