Documentation ¶
Overview ¶
Package ipstack is a helper package for calling the https://ipstack.com API. It includes type-safe response packets and a WorkerPool for asynchronous, once-only, lookup tasks
Index ¶
Constants ¶
const ( // DefaultClientTimeout is the recommended default for http timeouts, when // the external ipstack API is called DefaultClientTimeout = 5 )
Variables ¶
var ( // ErrFeedbackExistsFailed occurs when the provided implementation of // ipstack.WorkerFeedback.Exists returns an error. ErrFeedbackExistsFailed = "ipstack: WorkerPool: unable to check if ip already exists during feedback loop" // ErrAPIRequestFailed occurs when the external ipstack api returns an // error, or fails to meet the timeout requirements. ErrAPIRequestFailed = "ipstack: WorkerPool: error during api request" // ErrFeedbackCreateResponseFailed occurs when the provided implementation // of ipstack.WorkerFeedback.CreateResponse returns an error. ErrFeedbackCreateResponseFailed = "ipstack: WorkerPool: unable to create response during feedback loop" )
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client defines a single http client, which can be used to acces the external ipstack API
type Logger ¶
Logger defines a simple interface for logging info and error messages that occur during a Workers lifetime. The interface is chosen instead of a specific logging framework to decouple the package from other external dependencies and avoid stdout stderr logging
type Response ¶
type Response struct { IP string `json:"ip"` Type string `json:"type"` ContinentCode string `json:"continent_code"` ContinentName string `json:"continent_name"` CountryCode string `json:"country_code"` CountryName string `json:"country_name"` RegionCode string `json:"region_code"` RegionName string `json:"region_name"` City string `json:"city"` ZIP string `json:"zip"` Latitude float32 `json:"latitude"` Longitude float32 `json:"longitude"` Location struct { GeonameID int `json:"geoname_id"` Capital string `json:"capital"` Languages []struct { Code string `json:"code"` Name string `json:"name"` Native string `json:"native"` } `json:"languages"` CountryFlag string `json:"country_flag"` CountryFlagEmoji string `json:"country_flag_emoji"` CountryFlagEmojiUnicode string `json:"country_flag_emoji_unicode"` CallingCode string `json:"calling_code"` IsEU bool `json:"is_eu"` } `json:"location"` Timezone struct { ID string `json:"id"` CurrentTime string `json:"current_time"` GMTOffset int `json:"gmt_offset"` Code string `json:"code"` IsDaylightSaving bool `json:"is_daylight_saving"` } `json:"time_zone"` Currency struct { Code string `json:"code"` Name string `json:"name"` Plural string `json:"plural"` Symbol string `json:"symbol"` SymbolNative string `json:"symbol_native"` } `json:"currency"` Connection struct { ASN int `json:"asn"` ISP string `json:"isp"` } `json:"connection"` Security struct { IsProxy bool `json:"is_proxy"` ProxyType *string `json:"proxy_type"` IsCrawler bool `json:"is_crawler"` CrawlerName *string `json:"crawler_name"` CrawlerType *string `json:"crawler_type"` IsTor bool `json:"is_tor"` ThreatLevel string `json:"threat_level"` ThreatType *string `json:"threat_type"` } }
Response defines a typesafe response object returned from the external ipstack API
type WorkerFeedback ¶
type WorkerFeedback interface { Exists(ip string) (exists bool, err error) CreateResponse(ip string, r *Response) (err error) }
WorkerFeedback is used to give single workers inside the ipstack.WorkerPool feedback about the way they should handle the ip address in question
type WorkerPool ¶
type WorkerPool struct { Config *WorkerPoolConfig // contains filtered or unexported fields }
WorkerPool represents a single ipstack.WorkerPool, which is able to perform ipstack IP Checks in a coordinated way across a fleet of goroutine workers. The pool increases performance and removes blocking calls to external APIs from your own goroutine
func NewWorkerPool ¶
func NewWorkerPool(config *WorkerPoolConfig, c *Client, fb WorkerFeedback) (wp *WorkerPool, err error)
NewWorkerPool initializes a new WorkerPool instance. It performs runtime- checks for the passed arguments and starts all worker goroutines.
func (*WorkerPool) Queue ¶
func (wp *WorkerPool) Queue(ip string)
Queue queues the passed ip into the internal buffered channel for unresolved IPs. Workers will dequeue it once they are ready. If a shutdown occurs before all IPs are dequeued, the shutdown caller will synchronously handle all remaining IPs
func (*WorkerPool) Shutdown ¶
func (wp *WorkerPool) Shutdown()
Shutdown shutdowns all previously started workers and handles all remaining unresolved IPs synchronously before returing
type WorkerPoolConfig ¶
WorkerPoolConfig represents a configuration for an ipstack.WorkerPool
func NewDefaultWorkerPoolConfig ¶
func NewDefaultWorkerPoolConfig() *WorkerPoolConfig
NewDefaultWorkerPoolConfig returns a new ipstack.WorkerPoolConfig populated with default values and a dev/null logger implementation