Big rafactoring : code split in several modules and some other best practices
This commit is contained in:
parent
e07ce016c4
commit
bea8e5aba8
16 changed files with 506 additions and 386 deletions
21
config/config.go
Normal file
21
config/config.go
Normal file
|
@ -0,0 +1,21 @@
|
|||
package config
|
||||
|
||||
// Config object
|
||||
type Config struct {
|
||||
verbose bool
|
||||
quiet bool
|
||||
stateFile string
|
||||
workDir string
|
||||
}
|
||||
|
||||
// Verbose gets the verbose field of the configuration
|
||||
func (config *Config) Verbose() bool { return config.verbose }
|
||||
|
||||
// Quiet gets the quiet field of the configuration
|
||||
func (config *Config) Quiet() bool { return config.quiet }
|
||||
|
||||
// StateFile gets the stateFile field of the configuration
|
||||
func (config *Config) StateFile() string { return config.stateFile }
|
||||
|
||||
// WorkDir gets the workDir field of the configuration
|
||||
func (config *Config) WorkDir() string { return config.workDir }
|
16
config/init.go
Normal file
16
config/init.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
package config
|
||||
|
||||
import "flag"
|
||||
|
||||
// Init initialises a program config from the command line flags
|
||||
func (c *Config) Init() {
|
||||
flag.BoolVar(&c.verbose, "v", false, "Activates verbose debugging output, defaults to false.")
|
||||
flag.BoolVar(&c.quiet, "q", false, "Suppress all output, suitable to force a silent update of the spool file.")
|
||||
flag.StringVar(&c.stateFile, "f", "", "Force the state file to use, defaults to "+bareosStateFile+" if it exists else "+baculaStateFile+".")
|
||||
flag.StringVar(&c.workDir, "w", "", "Force the work directory to use, defaults to "+bareosWorkDir+" if it exists else "+baculaWorkDir+".")
|
||||
|
||||
// command line arguments parsing
|
||||
flag.Parse()
|
||||
c.checkWorkDir()
|
||||
c.checkStateFile()
|
||||
}
|
39
config/statefile.go
Normal file
39
config/statefile.go
Normal file
|
@ -0,0 +1,39 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
)
|
||||
|
||||
const (
|
||||
bareosStateFile = "bareos-fd.9102.state"
|
||||
baculaStateFile = "bacula-fd.9102.state"
|
||||
)
|
||||
|
||||
func (c *Config) checkStateFile() {
|
||||
// Finds the state file to parse
|
||||
if c.stateFile != "" {
|
||||
c.stateFile = path.Join(c.workDir, c.stateFile)
|
||||
info, err := os.Stat(c.stateFile)
|
||||
if os.IsNotExist(err) || info.IsDir() {
|
||||
fmt.Printf("INFO The state file %s does not exist.\n", c.stateFile)
|
||||
os.Exit(0)
|
||||
}
|
||||
} else {
|
||||
c.stateFile = path.Join(c.workDir, bareosStateFile)
|
||||
info, err := os.Stat(c.stateFile)
|
||||
if os.IsNotExist(err) || info.IsDir() {
|
||||
c.stateFile = path.Join(c.workDir, baculaStateFile)
|
||||
info, err = os.Stat(c.stateFile)
|
||||
if os.IsNotExist(err) || info.IsDir() {
|
||||
fmt.Println("INFO Could not find a suitable state file. Has a job ever run?")
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
if c.verbose {
|
||||
log.Println("Using state file ", c.stateFile)
|
||||
}
|
||||
}
|
40
config/workdir.go
Normal file
40
config/workdir.go
Normal file
|
@ -0,0 +1,40 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
)
|
||||
|
||||
const (
|
||||
bareosWorkDir = "/var/lib/bareos"
|
||||
baculaWorkDir = "/var/lib/bacula"
|
||||
)
|
||||
|
||||
// checkWorkDir checks if a work directory is valid
|
||||
func (c *Config) checkWorkDir() {
|
||||
// Determine the work directory to use.
|
||||
if c.workDir != "" {
|
||||
info, err := os.Stat(c.workDir)
|
||||
if os.IsNotExist(err) || !info.IsDir() {
|
||||
fmt.Printf("INFO Invalid work directory %s : it does not exist or is not a directory.\n", c.workDir)
|
||||
os.Exit(0)
|
||||
}
|
||||
} else {
|
||||
c.workDir = bareosWorkDir
|
||||
info, err := os.Stat(c.workDir)
|
||||
if os.IsNotExist(err) || !info.IsDir() {
|
||||
c.workDir = baculaWorkDir
|
||||
info, err := os.Stat(c.workDir)
|
||||
if os.IsNotExist(err) || !info.IsDir() {
|
||||
fmt.Println("INFO Could not find a suitable work directory. Is bareos or bacula installed?")
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
c.workDir = path.Clean(c.workDir)
|
||||
if c.verbose {
|
||||
log.Println("Setting work directory to ", c.workDir)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue