59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package caches
|
|
|
|
import (
|
|
"github.com/alice-lg/alice-lg/pkg/api"
|
|
)
|
|
|
|
/*
|
|
The birdwatcher already caches the responses from
|
|
bird and provides the API consumers with information
|
|
on how long the information is valid.
|
|
|
|
However, to avoid unnecessary network requests to the
|
|
birdwatcher, we keep a local cache. (This comes in handy
|
|
when we are paginating the results for better client performance.)
|
|
*/
|
|
|
|
// NeighborsCache implements a cache to store neighbors
|
|
type NeighborsCache struct {
|
|
response *api.NeighborsResponse
|
|
disabled bool
|
|
}
|
|
|
|
// NewNeighborsCache initializes a cache for neighbor responses.
|
|
func NewNeighborsCache(disabled bool) *NeighborsCache {
|
|
cache := &NeighborsCache{
|
|
response: nil,
|
|
disabled: disabled,
|
|
}
|
|
|
|
return cache
|
|
}
|
|
|
|
// Get retrievs the neighbors response from the cache, if present,
|
|
// and makes sure the information is still up to date.
|
|
func (cache *NeighborsCache) Get() *api.NeighborsResponse {
|
|
if cache.disabled {
|
|
return nil
|
|
}
|
|
|
|
if cache.response == nil {
|
|
return nil
|
|
}
|
|
|
|
if cache.response.CacheTTL() < 0 {
|
|
return nil
|
|
}
|
|
|
|
return cache.response
|
|
}
|
|
|
|
// Set updates the neighbors cache with a new response retrieved
|
|
// from a backend source.
|
|
func (cache *NeighborsCache) Set(response *api.NeighborsResponse) {
|
|
if cache.disabled {
|
|
return
|
|
}
|
|
cache.response = response
|
|
}
|