diff options
Diffstat (limited to 'cli/daemon.go')
-rw-r--r-- | cli/daemon.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/cli/daemon.go b/cli/daemon.go new file mode 100644 index 0000000..436729c --- /dev/null +++ b/cli/daemon.go @@ -0,0 +1,57 @@ +// Copyright 2018 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package cli // import "miniflux.app/cli" + +import ( + "context" + "os" + "os/signal" + "runtime" + "syscall" + "time" + + "miniflux.app/config" + "miniflux.app/logger" + "miniflux.app/reader/feed" + "miniflux.app/service/scheduler" + "miniflux.app/service/httpd" + "miniflux.app/storage" + "miniflux.app/worker" +) + +func startDaemon(cfg *config.Config, store *storage.Storage) { + logger.Info("Starting Miniflux...") + + stop := make(chan os.Signal, 1) + signal.Notify(stop, os.Interrupt) + signal.Notify(stop, syscall.SIGTERM) + + feedHandler := feed.NewFeedHandler(store) + pool := worker.NewPool(feedHandler, cfg.WorkerPoolSize()) + + go scheduler.Serve(cfg, store, pool) + go showProcessStatistics() + + httpServer := httpd.Serve(cfg, store, pool, feedHandler) + + <-stop + logger.Info("Shutting down the process...") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + httpServer.Shutdown(ctx) + logger.Info("Process gracefully stopped") +} + +func showProcessStatistics() { + for { + var m runtime.MemStats + runtime.ReadMemStats(&m) + logger.Debug("Sys=%vK, InUse=%vK, HeapInUse=%vK, StackSys=%vK, StackInUse=%vK, GoRoutines=%d, NumCPU=%d", + m.Sys/1024, (m.Sys-m.HeapReleased)/1024, m.HeapInuse/1024, m.StackSys/1024, m.StackInuse/1024, + runtime.NumGoroutine(), runtime.NumCPU()) + time.Sleep(30 * time.Second) + } +}
\ No newline at end of file |