imposm3/replication/diff.go

53 lines
1.0 KiB
Go

package replication
import (
"errors"
"fmt"
"net/http"
"time"
"github.com/omniscale/imposm3/update/state"
)
func NewDiffDownloader(dest, url string, seq int, interval time.Duration) *downloader {
dl := newDownloader(dest, url, seq, interval)
dl.fileExt = ".osc.gz"
dl.stateExt = ".state.txt"
dl.stateTime = parseTxtTime
go dl.fetchNextLoop()
return dl
}
func CurrentDiff(url string) (int, error) {
resp, err := http.Get(url + "state.txt")
if err != nil {
return 0, err
}
if resp.StatusCode != 200 {
return 0, errors.New(fmt.Sprintf("invalid repsonse: %v", resp))
}
defer resp.Body.Close()
s, err := state.Parse(resp.Body)
if err != nil {
return 0, err
}
return s.Sequence, nil
}
func parseTxtTime(filename string) (time.Time, error) {
ds, err := state.ParseFile(filename)
if err != nil {
return time.Time{}, err
}
return ds.Time, nil
}
func NewDiffReader(dest string, seq int) *reader {
r := newReader(dest, seq)
r.fileExt = ".osc.gz"
r.stateExt = ".state.txt"
r.stateTime = parseTxtTime
go r.fetchNextLoop()
return r
}