forked from hswaw/hscloud
personal/q3k/shipstuck: free! for now.
Change-Id: Ie4125396a328b5bb05dea88b6d49d79360221905master
parent
ec1aa355fe
commit
3df9d0c082
|
@ -4,7 +4,7 @@ local mirko = import "../../kube/mirko.libsonnet";
|
||||||
local top = self,
|
local top = self,
|
||||||
shipstuck:: {
|
shipstuck:: {
|
||||||
cfg:: {
|
cfg:: {
|
||||||
image: "registry.k0.hswaw.net/q3k/shipstuck:315532800-d95e0b92d94efc4a4c2a7b85bc224fe5786ed708",
|
image: "registry.k0.hswaw.net/q3k/shipstuck:315532800-0939d664a3eac4c0c67b447265c67bbcda9939d4",
|
||||||
domain: error "domain must be set",
|
domain: error "domain must be set",
|
||||||
},
|
},
|
||||||
component(cfg, env): mirko.Component(env, "shipstuck") {
|
component(cfg, env): mirko.Component(env, "shipstuck") {
|
||||||
|
|
|
@ -2,9 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -23,40 +21,8 @@ type vessel struct {
|
||||||
// get retrieves the current status of the ship - returns true if stack, false
|
// get retrieves the current status of the ship - returns true if stack, false
|
||||||
// otherwise.
|
// otherwise.
|
||||||
func get(ctx context.Context) (shipState, error) {
|
func get(ctx context.Context) (shipState, error) {
|
||||||
// Sorry vesselfinder, if you made it easy to set up an account I would
|
// 2021/03/29/ 17:23 UTC+2 it's been freed!
|
||||||
// gladly pay for the API instead of doing this. Limiting requests to once
|
return shipStateFreed, nil
|
||||||
// every 15 minutes though, that seems fair enough.
|
|
||||||
req, err := http.NewRequestWithContext(ctx, "GET", "https://www.vesselfinder.com/api/pub/click/353136000", nil)
|
|
||||||
if err != nil {
|
|
||||||
return shipStateUnknown, fmt.Errorf("NewRequestWithContext: %w", err)
|
|
||||||
}
|
|
||||||
req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0")
|
|
||||||
|
|
||||||
res, err := http.DefaultClient.Do(req)
|
|
||||||
if err != nil {
|
|
||||||
// vesselfinder.com down on 2021/03/29, add a 'cached' status for one hour as a hack.
|
|
||||||
if time.Now().Unix() < (1617024611 + 3600) {
|
|
||||||
glog.Warningf("Faking vesselfinder return.")
|
|
||||||
return shipStateTowed, nil
|
|
||||||
}
|
|
||||||
return shipStateUnknown, fmt.Errorf("Do: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
v := &vessel{}
|
|
||||||
err = json.NewDecoder(res.Body).Decode(v)
|
|
||||||
if err != nil {
|
|
||||||
return shipStateUnknown, fmt.Errorf("Decode: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if v.Speed > 10.0 {
|
|
||||||
return shipStateFreed, nil
|
|
||||||
}
|
|
||||||
if v.Speed > 0.5 {
|
|
||||||
return shipStateTowed, nil
|
|
||||||
}
|
|
||||||
return shipStateStuck, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type shipState string
|
type shipState string
|
||||||
|
|
Loading…
Reference in New Issue