diff options
author | Julien Dessaux | 2021-04-04 00:22:35 +0200 |
---|---|---|
committer | Julien Dessaux | 2021-04-04 00:22:35 +0200 |
commit | e5314fd75d63d56911769f636fdd1d91bfbfaff3 (patch) | |
tree | 0829daaab1a7ab526cf62875e4152855cb17e5ec /navitia_api_client/departures.go | |
parent | Renamed the api folder to something more specific (diff) | |
download | trains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.tar.gz trains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.tar.bz2 trains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.zip |
Added 60 seconds caching to navitia api departures requests
Diffstat (limited to '')
-rw-r--r-- | navitia_api_client/departures.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/navitia_api_client/departures.go b/navitia_api_client/departures.go index a6dcf53..7738940 100644 --- a/navitia_api_client/departures.go +++ b/navitia_api_client/departures.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "net/http" + "time" ) type DeparturesResponse struct { @@ -43,7 +44,16 @@ type DeparturesResponse struct { } func (c *Client) GetDepartures() (departures *DeparturesResponse, err error) { - req, err := http.NewRequest("GET", fmt.Sprintf("%s/coverage/sncf/stop_areas/stop_area:SNCF:87723502/departures", c.baseURL), nil) + request := fmt.Sprintf("%s/coverage/sncf/stop_areas/stop_area:SNCF:87723502/departures", c.baseURL) + start := time.Now() + c.mutex.Lock() + defer c.mutex.Unlock() + if cachedResult, ok := c.cache[request]; ok { + if start.Sub(cachedResult.ts) < 60*1000*1000*1000 { + return cachedResult.result.(*DeparturesResponse), nil + } + } + req, err := http.NewRequest("GET", request, nil) if err != nil { return nil, err } @@ -55,5 +65,9 @@ func (c *Client) GetDepartures() (departures *DeparturesResponse, err error) { if err = json.NewDecoder(resp.Body).Decode(&departures); err != nil { return nil, err } + c.cache[request] = cachedResult{ + ts: start, + result: departures, + } return } |