Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Optionally filter results by space GUIDs #44

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 41 additions & 7 deletions cf/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"log"
"net/http"
"net/url"
"strings"
"time"

"golang.org/x/oauth2"
Expand All @@ -31,23 +32,44 @@ type Client interface {
NewLogCacheClient() LogCacheClient
}

type OptionFunc func(c *client) error

type client struct {
config *cfclient.Config
cfClient *cfclient.Client
spaces []string
logCacheEndpoint string
}

func NewClient(config *cfclient.Config, logCacheEndpoint string) (Client, error) {
func WithSpaces(spaces string) OptionFunc {
list := strings.Split(spaces, ",")
if len(list) == 1 && list[0] == "" {
list = []string{}
}

return func(c *client) error {
c.spaces = list
return nil
}
}

func NewClient(config *cfclient.Config, logCacheEndpoint string, opts ...OptionFunc) (Client, error) {
cfClient, err := cfclient.NewClient(config)
if err != nil {
return nil, err
}

return &client{
client := &client{
config: config,
cfClient: cfClient,
logCacheEndpoint: logCacheEndpoint,
}, nil
}
for _, o := range opts {
if err := o(client); err != nil {
return nil, err
}
}
return client, nil
}

func (c *client) getOrgsAndSpacesByGuid() (map[string]cfclient.Org, map[string]cfclient.Space, error) {
Expand Down Expand Up @@ -76,7 +98,13 @@ func (c *client) ListAppsWithSpaceAndOrg() ([]cfclient.App, error) {
return nil, err
}

apps, err := c.cfClient.ListAppsByQuery(url.Values{})
queryParams := url.Values{}

if len(c.spaces) > 0 {
queryParams.Add("q", fmt.Sprintf("space_guid IN %s", strings.Join(c.spaces, ",")))
}

apps, err := c.cfClient.ListAppsByQuery(queryParams)
if err != nil {
return apps, err
}
Expand Down Expand Up @@ -111,11 +139,17 @@ func (c *client) ListServicesWithSpaceAndOrg() ([]ServiceInstance, error) {
return nil, err
}

services, err := c.cfClient.ListServiceInstances()
queryParams := url.Values{}

if len(c.spaces) > 0 {
queryParams.Add("q", fmt.Sprintf("space_guid IN %s", strings.Join(c.spaces, ",")))
}

services, err := c.cfClient.ListServiceInstancesByQuery(queryParams)
if err != nil {
return nil, err
}
resultServices := []ServiceInstance{}
var resultServices []ServiceInstance
for _, service := range services {
space, ok := spacesByGuid[service.SpaceGuid]
if !ok {
Expand Down Expand Up @@ -212,7 +246,7 @@ func getTokenWithRetry(tokenSource oauth2.TokenSource, maxRetries int, fallOffSe
if err != nil {
log.Printf("getting token failed (attempt %d of %d). Retrying. Error: %s", i+1, maxRetries, err.Error())

sleep := time.Duration(fallOffSeconds.Seconds() * float64(i + 1))
sleep := time.Duration(fallOffSeconds.Seconds() * float64(i+1))
time.Sleep(sleep)
continue
}
Expand Down
25 changes: 13 additions & 12 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,18 @@ import (

var (
version = "0.0.5"
apiEndpoint = kingpin.Flag("api-endpoint", "API endpoint").Required().OverrideDefaultFromEnvar("API_ENDPOINT").String()
logCacheEndpoint = kingpin.Flag("logcache-endpoint", "LogCache endpoint").Default("").OverrideDefaultFromEnvar("LOGCACHE_ENDPOINT").String()
username = kingpin.Flag("username", "UAA username.").Default("").OverrideDefaultFromEnvar("USERNAME").String()
password = kingpin.Flag("password", "UAA password.").Default("").OverrideDefaultFromEnvar("PASSWORD").String()
clientID = kingpin.Flag("client-id", "UAA client ID.").Default("").OverrideDefaultFromEnvar("CLIENT_ID").String()
clientSecret = kingpin.Flag("client-secret", "UAA client secret.").Default("").OverrideDefaultFromEnvar("CLIENT_SECRET").String()
updateFrequency = kingpin.Flag("update-frequency", "The time in seconds, that takes between each apps update call.").Default("300").OverrideDefaultFromEnvar("UPDATE_FREQUENCY").Int64()
scrapeInterval = kingpin.Flag("scrape-interval", "The time in seconds, that takes between Prometheus scrapes.").Default("60").OverrideDefaultFromEnvar("SCRAPE_INTERVAL").Int64()
prometheusBindPort = kingpin.Flag("prometheus-bind-port", "The port to bind to for prometheus metrics.").Default("8080").OverrideDefaultFromEnvar("PORT").Int()
authUsername = kingpin.Flag("auth-username", "HTTP basic auth username; leave blank to disable basic auth").Default("").OverrideDefaultFromEnvar("AUTH_USERNAME").String()
authPassword = kingpin.Flag("auth-password", "HTTP basic auth password").Default("").OverrideDefaultFromEnvar("AUTH_PASSWORD").String()
apiEndpoint = kingpin.Flag("api-endpoint", "API endpoint").Required().Envar("API_ENDPOINT").String()
logCacheEndpoint = kingpin.Flag("logcache-endpoint", "LogCache endpoint").Default("").Envar("LOGCACHE_ENDPOINT").String()
username = kingpin.Flag("username", "UAA username.").Default("").Envar("USERNAME").String()
password = kingpin.Flag("password", "UAA password.").Default("").Envar("PASSWORD").String()
clientID = kingpin.Flag("client-id", "UAA client ID.").Default("").Envar("CLIENT_ID").String()
clientSecret = kingpin.Flag("client-secret", "UAA client secret.").Default("").Envar("CLIENT_SECRET").String()
updateFrequency = kingpin.Flag("update-frequency", "The time in seconds, that takes between each apps update call.").Default("300").Envar("UPDATE_FREQUENCY").Int64()
scrapeInterval = kingpin.Flag("scrape-interval", "The time in seconds, that takes between Prometheus scrapes.").Default("60").Envar("SCRAPE_INTERVAL").Int64()
prometheusBindPort = kingpin.Flag("prometheus-bind-port", "The port to bind to for prometheus metrics.").Default("8080").Envar("PORT").Int()
authUsername = kingpin.Flag("auth-username", "HTTP basic auth username; leave blank to disable basic auth").Default("").Envar("AUTH_USERNAME").String()
authPassword = kingpin.Flag("auth-password", "HTTP basic auth password").Default("").Envar("AUTH_PASSWORD").String()
spaces = kingpin.Flag("spaces", "Consider apps and services in these space GUIDs only").Default("").Envar("SPACES").String()
)

type ServiceDiscovery interface {
Expand Down Expand Up @@ -109,7 +110,7 @@ func main() {
ClientSecret: *clientSecret,
UserAgent: userAgent,
}
client, err := cf.NewClient(config, *logCacheEndpoint)
client, err := cf.NewClient(config, *logCacheEndpoint, cf.WithSpaces(*spaces))
if err != nil {
log.Fatal(err)
}
Expand Down