func FetchDesiredState(l logger.Logger, conf *config.Config, poll bool) { store, _ := connectToStore(l, conf) if poll { l.Info("Starting Desired State Daemon...") adapter, _ := connectToStoreAdapter(l, conf) err := Daemonize("Fetcher", func() error { return fetchDesiredState(l, conf, store) }, conf.FetcherPollingInterval(), conf.FetcherTimeout(), l, adapter) if err != nil { l.Error("Desired State Daemon Errored", err) } l.Info("Desired State Daemon is Down") os.Exit(1) } else { err := fetchDesiredState(l, conf, store) if err != nil { os.Exit(1) } else { os.Exit(0) } } }
func Send(l logger.Logger, conf *config.Config, poll bool) { messageBus := connectToMessageBus(l, conf) store, _ := connectToStore(l, conf) if poll { l.Info("Starting Sender Daemon...") adapter, _ := connectToStoreAdapter(l, conf) err := Daemonize("Sender", func() error { return send(l, conf, messageBus, store) }, conf.SenderPollingInterval(), conf.SenderTimeout(), l, adapter) if err != nil { l.Error("Sender Daemon Errored", err) } l.Info("Sender Daemon is Down") os.Exit(1) } else { err := send(l, conf, messageBus, store) if err != nil { os.Exit(1) } else { os.Exit(0) } } }
func Analyze(l logger.Logger, conf *config.Config, poll bool) { store := connectToStore(l, conf) if poll { l.Info("Starting Analyze Daemon...") adapter := connectToStoreAdapter(l, conf, nil) err := Daemonize("Analyzer", func() error { return analyze(l, conf, store) }, conf.AnalyzerPollingInterval(), conf.AnalyzerTimeout(), l, adapter) if err != nil { l.Error("Analyze Daemon Errored", err) } l.Info("Analyze Daemon is Down") os.Exit(1) } else { err := analyze(l, conf, store) if err != nil { os.Exit(1) } else { os.Exit(0) } } }
func fetchDesiredState(l logger.Logger, conf *config.Config, store store.Store) error { l.Info("Fetching Desired State") fetcher := desiredstatefetcher.New(conf, store, metricsaccountant.New(store), httpclient.NewHttpClient(conf.SkipSSLVerification, conf.FetcherNetworkTimeout()), buildTimeProvider(l), l, ) resultChan := make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) fetcher.Fetch(resultChan) result := <-resultChan if result.Success { l.Info("Success", map[string]string{"Number of Desired Apps Fetched": strconv.Itoa(result.NumResults)}) return nil } else { l.Error(result.Message, result.Error) return result.Error } return nil }
import ( "github.com/cloudfoundry/gunk/workpool" . "github.com/cloudfoundry/hm9000/store" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry/hm9000/config" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter" "github.com/cloudfoundry/storeadapter/etcdstoreadapter" ) var _ = Describe("Compact", func() { var ( store Store storeAdapter storeadapter.StoreAdapter conf *config.Config ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() conf.StoreSchemaVersion = 17 Ω(err).ShouldNot(HaveOccurred()) storeAdapter = etcdstoreadapter.NewETCDStoreAdapter(etcdRunner.NodeURLS(), workpool.NewWorkPool(conf.StoreMaxConcurrentRequests)) err = storeAdapter.Connect() Ω(err).ShouldNot(HaveOccurred()) store = NewStore(conf, storeAdapter, fakelogger.NewFakeLogger()) })
"github.com/cloudfoundry/hm9000/models" storepackage "github.com/cloudfoundry/hm9000/store" "github.com/cloudfoundry/hm9000/testhelpers/appfixture" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/hm9000/testhelpers/fakemetricsaccountant" "github.com/cloudfoundry/storeadapter/fakestoreadapter" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Fetching from CC and storing the result in the Store", func() { var ( fetcher *desiredstatefetcher.DesiredStateFetcher a1 appfixture.AppFixture a2 appfixture.AppFixture a3 appfixture.AppFixture store storepackage.Store resultChan chan desiredstatefetcher.DesiredStateFetcherResult conf *config.Config storeAdapter *fakestoreadapter.FakeStoreAdapter ) BeforeEach(func() { storeAdapter = fakestoreadapter.New() resultChan = make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) a1 = appfixture.NewAppFixture() a2 = appfixture.NewAppFixture() a3 = appfixture.NewAppFixture() stateServer.SetDesiredState([]models.DesiredAppState{ a1.DesiredState(1), a2.DesiredState(1),
. "github.com/cloudfoundry/hm9000/store" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter" "github.com/cloudfoundry/storeadapter/etcdstoreadapter" "github.com/cloudfoundry/storeadapter/workerpool" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "encoding/json" "time" ) var _ = Describe("Freshness", func() { var ( store Store storeAdapter storeadapter.StoreAdapter conf *config.Config ) conf, _ = config.DefaultConfig() BeforeEach(func() { storeAdapter = etcdstoreadapter.NewETCDStoreAdapter(etcdRunner.NodeURLS(), workerpool.NewWorkerPool(conf.StoreMaxConcurrentRequests)) err := storeAdapter.Connect() Ω(err).ShouldNot(HaveOccurred()) store = NewStore(conf, storeAdapter, fakelogger.NewFakeLogger()) }) Describe("Bumping freshness", func() { bumpingFreshness := func(key string, ttl uint64, bump func(store Store, timestamp time.Time) error) {
type brokenReader struct{} func (b *brokenReader) Read([]byte) (int, error) { return 0, errors.New("oh no you didn't!") } func (b *brokenReader) Close() error { return nil } var _ = Describe("DesiredStateFetcher", func() { var ( conf *config.Config fetcher *DesiredStateFetcher httpClient *fakehttpclient.FakeHttpClient timeProvider *faketimeprovider.FakeTimeProvider store storepackage.Store storeAdapter *fakestoreadapter.FakeStoreAdapter resultChan chan DesiredStateFetcherResult metricsAccountant *fakemetricsaccountant.FakeMetricsAccountant ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() Ω(err).ShouldNot(HaveOccurred()) metricsAccountant = fakemetricsaccountant.New() resultChan = make(chan DesiredStateFetcherResult, 1) timeProvider = &faketimeprovider.FakeTimeProvider{ TimeToProvide: time.Unix(100, 0),
"github.com/cloudfoundry/hm9000/testhelpers/appfixture" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/hm9000/testhelpers/fakemetricsaccountant" "github.com/cloudfoundry/storeadapter/fakestoreadapter" "github.com/cloudfoundry/yagnats/fakeyagnats" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Sender", func() { var ( storeAdapter *fakestoreadapter.FakeStoreAdapter store storepackage.Store sender *Sender messageBus *fakeyagnats.FakeYagnats timeProvider *faketimeprovider.FakeTimeProvider dea appfixture.DeaFixture app appfixture.AppFixture conf *config.Config metricsAccountant *fakemetricsaccountant.FakeMetricsAccountant ) BeforeEach(func() { messageBus = fakeyagnats.New() dea = appfixture.NewDeaFixture() app = dea.GetApp(0) conf, _ = config.DefaultConfig() metricsAccountant = fakemetricsaccountant.New() timeProvider = &faketimeprovider.FakeTimeProvider{ TimeToProvide: time.Unix(int64(10+conf.ActualFreshnessTTL()), 0),
"github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/hm9000/testhelpers/fakemetricsaccountant" "github.com/cloudfoundry/hm9000/testhelpers/fakeusagetracker" "github.com/cloudfoundry/storeadapter/fakestoreadapter" "github.com/cloudfoundry/yagnats/fakeyagnats" ) var _ = Describe("Actual state listener", func() { var ( app AppFixture anotherApp AppFixture dea DeaFixture store storepackage.Store storeAdapter *fakestoreadapter.FakeStoreAdapter listener *ActualStateListener timeProvider *faketimeprovider.FakeTimeProvider messageBus *fakeyagnats.FakeYagnats logger *fakelogger.FakeLogger conf *config.Config freshByTime time.Time usageTracker *fakeusagetracker.FakeUsageTracker metricsAccountant *fakemetricsaccountant.FakeMetricsAccountant ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() Ω(err).ShouldNot(HaveOccurred()) timeProvider = faketimeprovider.New(time.Unix(100, 0))
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry/hm9000/config" "github.com/cloudfoundry/hm9000/models" "github.com/cloudfoundry/hm9000/testhelpers/appfixture" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter" "github.com/cloudfoundry/storeadapter/etcdstoreadapter" ) var _ = Describe("Actual State", func() { var ( store Store storeAdapter storeadapter.StoreAdapter conf *config.Config dea appfixture.DeaFixture otherDea appfixture.DeaFixture ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() Ω(err).ShouldNot(HaveOccurred()) storeAdapter = etcdstoreadapter.NewETCDStoreAdapter(etcdRunner.NodeURLS(), workpool.NewWorkPool(conf.StoreMaxConcurrentRequests)) err = storeAdapter.Connect() Ω(err).ShouldNot(HaveOccurred()) conf.StoreHeartbeatCacheRefreshIntervalInMilliseconds = 100 store = NewStore(conf, storeAdapter, fakelogger.NewFakeLogger())
"github.com/cloudfoundry/hm9000/models" storepackage "github.com/cloudfoundry/hm9000/store" "github.com/cloudfoundry/hm9000/testhelpers/appfixture" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter/fakestoreadapter" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/pivotal-golang/clock" ) var _ = Describe("Fetching from CC and storing the result in the Store", func() { var ( fetcher *desiredstatefetcher.DesiredStateFetcher a1 appfixture.AppFixture a2 appfixture.AppFixture a3 appfixture.AppFixture store storepackage.Store resultChan chan desiredstatefetcher.DesiredStateFetcherResult conf *config.Config storeAdapter *fakestoreadapter.FakeStoreAdapter ) BeforeEach(func() { storeAdapter = fakestoreadapter.New() resultChan = make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) a1 = appfixture.NewAppFixture() a2 = appfixture.NewAppFixture() a3 = appfixture.NewAppFixture() stateServer.SetDesiredState([]models.DesiredAppState{ a1.DesiredState(1), a2.DesiredState(1),
"github.com/cloudfoundry/hm9000/helpers/metricsaccountant/fakemetricsaccountant" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter/fakestoreadapter" "github.com/cloudfoundry/yagnats/fakeyagnats" ) var _ = Describe("Actual state listener", func() { var ( app AppFixture anotherApp AppFixture dea DeaFixture store *fakestore.FakeStore storeAdapter *fakestoreadapter.FakeStoreAdapter listener *ActualStateListener clock *fakeclock.FakeClock messageBus *fakeyagnats.FakeNATSConn logger *fakelogger.FakeLogger conf *config.Config freshByTime time.Time usageTracker *fakemetricsaccountant.FakeUsageTracker metricsAccountant *fakemetricsaccountant.FakeMetricsAccountant ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() Expect(err).NotTo(HaveOccurred()) clock = fakeclock.NewFakeClock(time.Unix(100, 0))
"github.com/cloudfoundry/storeadapter/workerpool" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry/hm9000/config" "github.com/cloudfoundry/hm9000/models" "github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter" "github.com/cloudfoundry/storeadapter/etcdstoreadapter" ) var _ = Describe("Crash Count", func() { var ( store Store storeAdapter storeadapter.StoreAdapter conf *config.Config crashCount1 models.CrashCount crashCount2 models.CrashCount crashCount3 models.CrashCount ) BeforeEach(func() { var err error conf, err = config.DefaultConfig() Ω(err).ShouldNot(HaveOccurred()) storeAdapter = etcdstoreadapter.NewETCDStoreAdapter(etcdRunner.NodeURLS(), workerpool.NewWorkerPool(conf.StoreMaxConcurrentRequests)) err = storeAdapter.Connect() Ω(err).ShouldNot(HaveOccurred()) crashCount1 = models.CrashCount{AppGuid: models.Guid(), AppVersion: models.Guid(), InstanceIndex: 1, CrashCount: 17} crashCount2 = models.CrashCount{AppGuid: models.Guid(), AppVersion: models.Guid(), InstanceIndex: 4, CrashCount: 17} crashCount3 = models.CrashCount{AppGuid: models.Guid(), AppVersion: models.Guid(), InstanceIndex: 3, CrashCount: 17}
"github.com/cloudfoundry/hm9000/testhelpers/fakelogger" "github.com/cloudfoundry/storeadapter/fakestoreadapter" "github.com/cloudfoundry/yagnats/fakeyagnats" "github.com/nats-io/nats" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/pivotal-golang/clock/fakeclock" ) var _ = Describe("Sender", func() { var ( storeAdapter *fakestoreadapter.FakeStoreAdapter store storepackage.Store sender *Sender messageBus *fakeyagnats.FakeNATSConn timeProvider *fakeclock.FakeClock dea appfixture.DeaFixture app appfixture.AppFixture conf *config.Config metricsAccountant *fakemetricsaccountant.FakeMetricsAccountant ) BeforeEach(func() { messageBus = fakeyagnats.Connect() dea = appfixture.NewDeaFixture() app = dea.GetApp(0) conf, _ = config.DefaultConfig() metricsAccountant = &fakemetricsaccountant.FakeMetricsAccountant{} timeProvider = fakeclock.NewFakeClock(time.Unix(int64(10+conf.ActualFreshnessTTL()), 0))