From e5314fd75d63d56911769f636fdd1d91bfbfaff3 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 4 Apr 2021 00:22:35 +0200 Subject: Added 60 seconds caching to navitia api departures requests --- navitia_api_client/departures.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'navitia_api_client/departures.go') 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 } -- cgit v1.2.3