Tesla/alert/alert.go

92 lines
1.9 KiB
Go
Raw Normal View History

2023-06-05 13:41:48 +00:00
package alert
import (
"context"
"os"
"strconv"
"time"
"git.dev.m-and-m.ovh/mderasse/tesla/api"
log "github.com/sirupsen/logrus"
)
var apiClient *api.Client
2023-06-11 16:15:47 +00:00
var alert = 0
2023-06-05 13:41:48 +00:00
// Init will initialize telegram bot.
func Init(alertChan chan api.Availability) {
log.Info("Starting alert ticker")
var err error
apiClient, err = api.NewClient()
if err != nil {
log.Fatalf("Fail to instantiate the HTTP Client. Error: %s", err.Error())
}
2023-07-20 18:28:06 +00:00
tickerInSecond := os.Getenv("TICKER_ALERT")
if tickerInSecond != "" {
ticker, err = strconv.ParseInt(tickerInSecond, 10, 64)
2023-06-05 13:41:48 +00:00
if err != nil {
2023-07-20 18:28:06 +00:00
log.Fatalf("invalid configuration. TICKER_ALERT environement variable should be an integer.")
2023-06-05 13:41:48 +00:00
}
}
// define an interval and the ticker for this interval
2023-07-20 18:28:06 +00:00
interval := time.Duration(ticker) * time.Second
2023-06-05 13:41:48 +00:00
// create a new Ticker
tk := time.NewTicker(interval)
2023-06-11 16:15:47 +00:00
resetAlert := 0
2023-06-05 13:41:48 +00:00
for range tk.C {
2023-06-11 16:15:47 +00:00
if alert > 10 {
alert = 0
resetAlert = 10
continue
}
if resetAlert != 0 {
resetAlert--
continue
}
2023-06-05 13:41:48 +00:00
checkPrice(alertChan)
}
}
func checkPrice(alertChan chan api.Availability) {
log.Info("Ticker - Checking price")
availabilities, err := apiClient.GetAvailabilities(context.Background(), &api.AvailabilityParams{
Query: carFilter,
Count: 100,
2023-06-05 13:41:48 +00:00
})
if err != nil {
log.Warnf("Fail to contact API. Error: %s", err.Error())
return
}
2023-06-21 13:50:27 +00:00
StdAlert := false
LrAlert := false
for _, availability := range availabilities.Results {
2023-06-21 13:47:10 +00:00
2023-06-26 07:59:36 +00:00
if availability.IsDemo && availability.Odometer > 100 {
2023-06-21 13:47:10 +00:00
continue
}
2023-06-21 13:50:27 +00:00
if !StdAlert && availability.Price < 39000 && availability.Trim[0] == "SRRWD" {
log.Info("Launching an alert !")
alertChan <- availability
alert++
2023-06-21 13:50:27 +00:00
StdAlert = true
}
2023-07-15 16:04:10 +00:00
if !LrAlert && availability.Price < 47500 && availability.Trim[0] == "LRAWD" {
log.Info("Launching an alert !")
alertChan <- availability
alert++
2023-06-21 13:50:27 +00:00
LrAlert = true
}
2023-06-05 13:41:48 +00:00
}
}