Skip to content

Commit

Permalink
Add service controllers and installers commands
Browse files Browse the repository at this point in the history
  • Loading branch information
mlsmaycon committed Jun 20, 2021
1 parent 06c7af0 commit a66cdcc
Show file tree
Hide file tree
Showing 5 changed files with 196 additions and 63 deletions.
16 changes: 11 additions & 5 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/spf13/cobra"
"os"
"os/signal"
"runtime"
)

const (
Expand All @@ -14,8 +15,9 @@ const (
)

var (
configPath string
logLevel string
configPath string
defaultConfigPath string
logLevel string

rootCmd = &cobra.Command{
Use: "wiretrustee",
Expand All @@ -28,16 +30,20 @@ var (
func Execute() error {
return rootCmd.Execute()
}

func init() {
rootCmd.PersistentFlags().StringVar(&configPath, "config", "/etc/wiretrustee/config.json", "Wiretrustee config file location to write new config to")
defaultConfigPath = "/etc/wiretrustee/config.json"
if runtime.GOOS == "windows" {
defaultConfigPath = os.Getenv("PROGRAMDATA") + "Wiretrustee" + "config.json"
}
rootCmd.PersistentFlags().StringVar(&configPath, "config", defaultConfigPath, "Wiretrustee config file location to write new config to")
rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "")
rootCmd.AddCommand(initCmd)
rootCmd.AddCommand(addPeerCmd)
rootCmd.AddCommand(upCmd)
rootCmd.AddCommand(signalCmd)
rootCmd.AddCommand(serviceCmd)
serviceCmd.AddCommand(runCmd) // run is a subcommand of service
serviceCmd.AddCommand(runCmd, startCmd, stopCmd, restartCmd) // service control commands are subcommands of service
serviceCmd.AddCommand(installCmd, uninstallCmd) // service installer commands are subcommands of service
}

// SetupCloseHandler handles SIGTERM signal and exits with success
Expand Down
22 changes: 22 additions & 0 deletions cmd/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,17 @@ package cmd

import (
"github.com/kardianos/service"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

type program struct {
cmd *cobra.Command
args []string
}

var logger service.Logger

func newSVCConfig() *service.Config {
return &service.Config{
Name: "wiretrustee",
Expand All @@ -13,6 +21,20 @@ func newSVCConfig() *service.Config {
}
}

func newSVC(prg *program, conf *service.Config) (service.Service, error) {
s, err := service.New(prg, conf)
if err != nil {
log.Fatal(err)
return nil, err
}
logger, err = s.Logger(nil)
if err != nil {
log.Fatal(err)
return nil, err
}
return s, nil
}

var (
serviceCmd = &cobra.Command{
Use: "service",
Expand Down
99 changes: 99 additions & 0 deletions cmd/service_controller.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package cmd

import (
"github.com/kardianos/service"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)

func (p *program) Start(s service.Service) error {
// Start should not block. Do the actual work async.
logger.Info("Starting service") //nolint
go upCmd.Run(p.cmd, p.args)
return nil
}

func (p *program) Stop(s service.Service) error {
stopUP <- 1
return nil
}

var (
runCmd = &cobra.Command{
Use: "run",
Short: "runs wiretrustee as service",
Run: func(cmd *cobra.Command, args []string) {

prg := &program{
cmd: cmd,
args: args,
}

s, err := newSVC(prg, newSVCConfig())
if err != nil {
log.Fatal(err)
}
err = s.Run()
if err != nil {
logger.Error(err) //nolint
}
},
}
)

var (
startCmd = &cobra.Command{
Use: "start",
Short: "starts wiretrustee service",
Run: func(cmd *cobra.Command, args []string) {

s, err := newSVC(&program{}, newSVCConfig())
if err != nil {
log.Fatal(err)
}
err = s.Start()
if err != nil {
logger.Error(err) //nolint
}
},
}
)

var (
stopCmd = &cobra.Command{
Use: "stop",
Short: "stops wiretrustee service",
Run: func(cmd *cobra.Command, args []string) {

s, err := newSVC(&program{}, newSVCConfig())
if err != nil {
log.Fatal(err)
}
err = s.Stop()
if err != nil {
logger.Error(err) //nolint
}
},
}
)

var (
restartCmd = &cobra.Command{
Use: "restart",
Short: "restarts wiretrustee service",
Run: func(cmd *cobra.Command, args []string) {

s, err := newSVC(&program{}, newSVCConfig())
if err != nil {
log.Fatal(err)
}
err = s.Restart()
if err != nil {
logger.Error(err) //nolint
}
},
}
)

func init() {
}
64 changes: 64 additions & 0 deletions cmd/service_installer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package cmd

import (
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"runtime"
)

var (
installCmd = &cobra.Command{
Use: "install",
Short: "installs wiretrustee service",
Run: func(cmd *cobra.Command, args []string) {

svcConfig := newSVCConfig()

svcConfig.Arguments = []string{
"service",
"run",
"--config",
configPath,
"--log-level",
logLevel,
}

if runtime.GOOS == "linux" {
// Respected only by systemd systems
svcConfig.Dependencies = []string{"After=network.target syslog.target"}
}

s, err := newSVC(&program{}, svcConfig)
if err != nil {
log.Fatal(err)
}

err = s.Install()
if err != nil {
log.Error(err)
}
},
}
)

var (
uninstallCmd = &cobra.Command{
Use: "uninstall",
Short: "uninstalls wiretrustee service from system",
Run: func(cmd *cobra.Command, args []string) {

s, err := newSVC(&program{}, newSVCConfig())
if err != nil {
log.Fatal(err)
}

err = s.Uninstall()
if err != nil {
log.Error(err)
}
},
}
)

func init() {
}
58 changes: 0 additions & 58 deletions cmd/service_run.go

This file was deleted.

0 comments on commit a66cdcc

Please sign in to comment.