92 lines
1.8 KiB
Go
92 lines
1.8 KiB
Go
package feta
|
|
|
|
import "os"
|
|
|
|
//import "os/signal"
|
|
import "sync"
|
|
|
|
//import "syscall"
|
|
import "time"
|
|
|
|
import "github.com/rs/zerolog"
|
|
import "github.com/rs/zerolog/log"
|
|
import "golang.org/x/crypto/ssh/terminal"
|
|
|
|
func CLIEntry(version string, buildtime string, buildarch string, builduser string) int {
|
|
f := new(FetaProcess)
|
|
f.version = version
|
|
f.buildtime = buildtime
|
|
f.buildarch = buildarch
|
|
f.builduser = builduser
|
|
f.setupLogging()
|
|
return f.runForever()
|
|
}
|
|
|
|
// FetaProcess is the main structure/process of this app
|
|
type FetaProcess struct {
|
|
version string
|
|
buildtime string
|
|
buildarch string
|
|
builduser string
|
|
archiver *TootArchiver
|
|
api *TootArchiverAPIServer
|
|
wg *sync.WaitGroup
|
|
//quit chan os.Signal
|
|
}
|
|
|
|
func (f *FetaProcess) identify() {
|
|
log.Info().
|
|
Str("version", f.version).
|
|
Str("buildtime", f.buildtime).
|
|
Str("buildarch", f.buildarch).
|
|
Str("builduser", f.builduser).
|
|
Msg("starting")
|
|
}
|
|
|
|
func (f *FetaProcess) setupLogging() {
|
|
log.Logger = log.With().Caller().Logger()
|
|
if terminal.IsTerminal(int(os.Stdout.Fd())) {
|
|
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
|
}
|
|
|
|
// always log in UTC
|
|
zerolog.TimestampFunc = func() time.Time {
|
|
return time.Now().UTC()
|
|
}
|
|
|
|
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
|
if os.Getenv("DEBUG") != "" {
|
|
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
|
}
|
|
|
|
f.identify()
|
|
}
|
|
|
|
func (f *FetaProcess) runForever() int {
|
|
f.archiver = NewTootArchiver()
|
|
|
|
f.api = new(TootArchiverAPIServer)
|
|
f.api.SetArchiver(f.archiver)
|
|
|
|
//FIXME(sneak) get this channel into places that need to be shut down
|
|
//f.quit = make(chan os.Signal)
|
|
//signal.Notify(f.quit, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
f.wg = new(sync.WaitGroup)
|
|
// start api webserver goroutine
|
|
f.wg.Add(1)
|
|
go func() {
|
|
f.api.Serve()
|
|
f.wg.Done()
|
|
}()
|
|
|
|
f.wg.Add(1)
|
|
go func() {
|
|
f.archiver.RunForever()
|
|
f.wg.Done()
|
|
}()
|
|
|
|
f.wg.Wait()
|
|
return 0
|
|
}
|