fargo – github.com/hudl/fargo Index | Files | Directories

package fargo

import "github.com/hudl/fargo"

Index

Constants

const (
	Amazon = "Amazon"
	MyOwn  = "MyOwn"
)

Datacenter names

Variables

var ErrNotInAWS = fmt.Errorf("Not in AWS")
var EurekaURLSlugs = map[string]string{
	"Apps":      "apps",
	"Instances": "instances",
}

EurekaUrlSlugs is a map of resource names -> eureka URLs

Types

type AmazonMetadataType

type AmazonMetadataType struct {
	AmiLaunchIndex   string `xml:"ami-launch-index" json:"ami-launch-index"`
	LocalHostname    string `xml:"local-hostname" json:"local-hostname"`
	AvailabilityZone string `xml:"availability-zone" json:"availability-zone"`
	InstanceID       string `xml:"instance-id" json:"instance-id"`
	PublicIpv4       string `xml:"public-ipv4" json:"public-ipv4"`
	PublicHostname   string `xml:"public-hostname" json:"public-hostname"`
	AmiManifestPath  string `xml:"ami-manifest-path" json:"ami-manifest-path"`
	LocalIpv4        string `xml:"local-ipv4" json:"local-ipv4"`
	HostName         string `xml:"hostname" json:"hostname"`
	AmiID            string `xml:"ami-id" json:"ami-id"`
	InstanceType     string `xml:"instance-type" json:"instance-type"`
}

AmazonMetadataType is information about AZ's, AMI's, and the AWS instance <xsd:complexType name="amazonMetdataType"> from http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?AESDG-chapter-instancedata.html

type AppNotFoundError

type AppNotFoundError struct {
	// contains filtered or unexported fields
}

func (AppNotFoundError) Error

func (e AppNotFoundError) Error() string

type Application

type Application struct {
	Name      string      `xml:"name" json:"name"`
	Instances []*Instance `xml:"instance" json:"instance"`
}

Application deserializeable from Eureka XML

func (*Application) ParseAllMetadata

func (a *Application) ParseAllMetadata() error

ParseAllMetadata iterates through all instances in an application

func (*Application) UnmarshalJSON

func (a *Application) UnmarshalJSON(b []byte) error

UnmarshalJSON is a custom JSON unmarshaler for Application to deal with sometimes non-wrapped Instance array when there is only a single Instance item.

type Config

type Config struct {
	AWS    aws
	Eureka eureka
}

Config is a base struct to be read by code.google.com/p/gcfg

func ReadConfig

func ReadConfig(loc string) (conf Config, err error)

ReadConfig from a file location. Minimal error handling. Just bails and passes up an error if the file isn't found

type DataCenterInfo

type DataCenterInfo struct {
	Name     string             `xml:"name" json:"name"`
	Metadata AmazonMetadataType `xml:"metadata" json:"metadata"`
}

DataCenterInfo is only really useful when running in AWS.

type EurekaConnection

type EurekaConnection struct {
	ServiceUrls    []string
	ServicePort    int
	Timeout        time.Duration
	PollInterval   time.Duration
	PreferSameZone bool
	Retries        int
	DNSDiscovery   bool
	DiscoveryZone  string

	UseJson bool
	// contains filtered or unexported fields
}

EurekaConnection is the settings required to make eureka requests

func NewConn

func NewConn(address ...string) (e EurekaConnection)

NewConn is a default connection with just a list of ServiceUrls. Most basic way to make a new connection. Generally only if you know what you're doing and are going to do the configuration yourself some other way.

func NewConnFromConfig

func NewConnFromConfig(conf Config) (c EurekaConnection)

NewConnFromConfig will, given a Config struct, return a connection based on those options

func NewConnFromConfigFile

func NewConnFromConfigFile(location string) (c EurekaConnection, err error)

NewConnFromConfigFile sets up a connection object based on a config in specified path

func (EurekaConnection) AddMetadataString

func (e EurekaConnection) AddMetadataString(ins *Instance, key, value string) error

AddMetadataString to a given instance. Is immediately sent to Eureka server.

func (*EurekaConnection) DeregisterInstance

func (e *EurekaConnection) DeregisterInstance(ins *Instance) error

DeregisterInstance will deregister the given Instance from eureka. This is good practice to do before exiting or otherwise going off line.

func (*EurekaConnection) GetApp

func (e *EurekaConnection) GetApp(name string) (*Application, error)

GetApp returns a single eureka application by name

func (*EurekaConnection) GetApps

func (e *EurekaConnection) GetApps() (map[string]*Application, error)

GetApps returns a map of all Applications

func (*EurekaConnection) GetInstance

func (e *EurekaConnection) GetInstance(app, insId string) (*Instance, error)

GetInstance gets an Instance from eureka given its app and instanceid.

func (*EurekaConnection) HeartBeatInstance

func (e *EurekaConnection) HeartBeatInstance(ins *Instance) error

HeartBeatInstance sends a single eureka heartbeat. Does not continue sending heartbeats. Errors if the response is not 200.

func (*EurekaConnection) RegisterInstance

func (e *EurekaConnection) RegisterInstance(ins *Instance) error

RegisterInstance will register the given Instance with eureka if it is not already registered, but DOES NOT automatically send heartbeats. See HeartBeatInstance for that functionality

func (*EurekaConnection) ReregisterInstance

func (e *EurekaConnection) ReregisterInstance(ins *Instance) error

ReregisterInstance will register the given Instance with eureka but DOES NOT automatically send heartbeats. See HeartBeatInstance for that functionality

func (*EurekaConnection) SelectServiceURL

func (e *EurekaConnection) SelectServiceURL() string

SelectServiceURL gets a eureka instance based on the connection's load balancing scheme. TODO: Make this not just pick a random one.

func (*EurekaConnection) UpdateApp

func (e *EurekaConnection) UpdateApp(app *Application)

UpdateApp creates a goroutine that continues to keep an application updated with its status in Eureka

func (EurekaConnection) UpdateInstanceStatus

func (e EurekaConnection) UpdateInstanceStatus(ins *Instance, status StatusType) error

UpdateInstanceStatus updates the status of a given instance with eureka.

type GetAppResponseJson

type GetAppResponseJson struct {
	Application Application `json:"application"`
}

Application deserializeable from Eureka JSON

type GetAppsResponse

type GetAppsResponse struct {
	Applications  []*Application `xml:"application" json:"application"`
	AppsHashcode  string         `xml:"apps__hashcode" json:"apps__hashcode"`
	VersionsDelta int            `xml:"versions__delta" json:"versions__delta"`
}

GetAppsResponse lets us deserialize the eureka/v2/apps response XML

func (*GetAppsResponse) UnmarshalJSON

func (r *GetAppsResponse) UnmarshalJSON(b []byte) error

UnmarshalJSON is a custom JSON unmarshaler for GetAppsResponse to deal with sometimes non-wrapped Application arrays when there is only a single Application item.

type GetAppsResponseJson

type GetAppsResponseJson struct {
	Response *GetAppsResponse `json:"applications"`
}

GetAppsResponseJson lets us deserialize the eureka/v2/apps response JSON--a wrapped GetAppsResponse

type Instance

type Instance struct {
	XMLName          struct{} `xml:"instance" json:"-"`
	HostName         string   `xml:"hostName" json:"hostName"`
	App              string   `xml:"app" json:"app"`
	IPAddr           string   `xml:"ipAddr" json:"ipAddr"`
	VipAddress       string   `xml:"vipAddress" json:"vipAddress"`
	SecureVipAddress string   `xml:"secureVipAddress" json:"secureVipAddress"`

	Status           StatusType `xml:"status" json:"status"`
	Overriddenstatus StatusType `xml:"overriddenstatus" json:"overriddenstatus"`

	Port        int  `xml:"port" json:"-"`
	PortJ       Port `json:"port" xml:"-"`
	SecurePort  int  `xml:"securePort" json:"-"`
	SecurePortJ Port `json:"securePort" xml:"-"`

	HomePageUrl    string `xml:"homePageUrl" json:"homePageUrl"`
	StatusPageUrl  string `xml:"statusPageUrl" json:"statusPageUrl"`
	HealthCheckUrl string `xml:"healthCheckUrl" json:"healthCheckUrl"`

	CountryId      int64          `xml:"countryId" json:"countryId"`
	DataCenterInfo DataCenterInfo `xml:"dataCenterInfo" json:"dataCenterInfo"`

	LeaseInfo LeaseInfo        `xml:"leaseInfo" json:"leaseInfo"`
	Metadata  InstanceMetadata `xml:"metadata" json:"metadata"`

	UniqueID func(i Instance) string `xml:"-" json:"-"`
}

Instance [de]serializeable [to|from] Eureka XML

func (*Instance) Id

func (i *Instance) Id() string

func (*Instance) SetMetadataString

func (ins *Instance) SetMetadataString(key, value string)

SetMetadataString for a given instance before register

func (*Instance) UnmarshalJSON

func (i *Instance) UnmarshalJSON(b []byte) error

UnmarshalJSON is a custom JSON unmarshaler for Instance to deal with the different Port encodings between XML and JSON. Here we copy the values from the JSON Port struct into the simple XML int field.

type InstanceMetadata

type InstanceMetadata struct {
	Raw []byte `xml:",innerxml" json:"-"`
	// contains filtered or unexported fields
}

InstanceMetadata represents the eureka metadata, which is arbitrary XML. See metadata.go for more info.

func (*InstanceMetadata) GetBool

func (im *InstanceMetadata) GetBool(key string) (b bool, err error)

GetBool pulls a value cast as bool. Swallows panics from type assertion and returns false + an error if conversion fails

func (*InstanceMetadata) GetFloat32

func (im *InstanceMetadata) GetFloat32(key string) (f float32, err error)

GetFloat32 pulls a value cast as float. Swallows panics from type assertion and returns 0.0 + an error if conversion fails

func (*InstanceMetadata) GetFloat64

func (im *InstanceMetadata) GetFloat64(key string) (f float64, err error)

GetFloat64 pulls a value cast as float. Swallows panics from type assertion and returns 0.0 + an error if conversion fails

func (*InstanceMetadata) GetInt

func (im *InstanceMetadata) GetInt(key string) (i int, err error)

GetInt pulls a value cast as int. Swallows panics from type assertion and returns 0 + an error if conversion fails

func (*InstanceMetadata) GetMap

func (im *InstanceMetadata) GetMap() map[string]interface{}

GetMap returns a map of the metadata parameters for this instance

func (*InstanceMetadata) GetString

func (im *InstanceMetadata) GetString(key string) (s string, err error)

GetString pulls a value cast as a string. Swallows panics from type assertion and returns empty string + an error if conversion fails

func (*InstanceMetadata) MarshalJSON

func (i *InstanceMetadata) MarshalJSON() ([]byte, error)

MarshalJSON is a custom JSON marshaler for InstanceMetadata.

func (InstanceMetadata) MarshalXML

func (i InstanceMetadata) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML is a custom XML marshaler for InstanceMetadata.

func (*InstanceMetadata) UnmarshalJSON

func (i *InstanceMetadata) UnmarshalJSON(b []byte) error

UnmarshalJSON is a custom JSON unmarshaler for InstanceMetadata to handle squirreling away the raw JSON for later parsing.

type LeaseInfo

type LeaseInfo struct {
	RenewalIntervalInSecs int32 `xml:"renewalIntervalInSecs" json:"renewalIntervalInSecs"`
	DurationInSecs        int32 `xml:"durationInSecs" json:"durationInSecs"`
	RegistrationTimestamp int64 `xml:"registrationTimestamp" json:"registrationTimestamp"`
	LastRenewalTimestamp  int64 `xml:"lastRenewalTimestamp" json:"lastRenewalTimestamp"`
	EvictionTimestamp     int64 `xml:"evictionTimestamp" json:"evictionTimestamp"`
	ServiceUpTimestamp    int64 `xml:"serviceUpTimestamp" json:"serviceUpTimestamp"`
}

LeaseInfo tells us about the renewal from Eureka, including how old it is

type Port

type Port struct {
	Number  string `json:"$"`
	Enabled string `json:"@enabled"`
}

Port struct used for JSON [un]marshaling only looks like: "port":{"@enabled":"true", "$":"7101"},

type RegisterInstanceJson

type RegisterInstanceJson struct {
	Instance *Instance `json:"instance"`
}

RegisterInstanceJson lets us serialize the eureka/v2/apps/<ins> request JSON--a wrapped Instance

type StatusType

type StatusType string

StatusType is an enum of the different statuses allowed by Eureka

const (
	UP           StatusType = "UP"
	DOWN         StatusType = "DOWN"
	STARTING     StatusType = "STARTING"
	OUTOFSERVICE StatusType = "OUT_OF_SERVICE"
	UNKNOWN      StatusType = "UNKNOWN"
)

Supported statuses

Source Files

config.go connection.go dns_discover.go errors.go log.go marshal.go metadata.go net.go rpc.go struct.go

Directories

PathSynopsis
tests
Version
v1.1.0
Published
Feb 26, 2016
Platform
js/wasm
Imports
18 packages
Last checked
3 weeks ago

Tools for package owners.