aboutsummaryrefslogtreecommitdiff
path: root/navitia_api_client/departures.go
diff options
context:
space:
mode:
authorJulien Dessaux2021-04-04 00:22:35 +0200
committerJulien Dessaux2021-04-04 00:22:35 +0200
commite5314fd75d63d56911769f636fdd1d91bfbfaff3 (patch)
tree0829daaab1a7ab526cf62875e4152855cb17e5ec /navitia_api_client/departures.go
parentRenamed the api folder to something more specific (diff)
downloadtrains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.tar.gz
trains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.tar.bz2
trains-e5314fd75d63d56911769f636fdd1d91bfbfaff3.zip
Added 60 seconds caching to navitia api departures requests
Diffstat (limited to 'navitia_api_client/departures.go')
-rw-r--r--navitia_api_client/departures.go16
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
}