Skip to content

Commit

Permalink
modified: cmd/immortal/main.go
Browse files Browse the repository at this point in the history
	modified:   config.go
	new file:   example/env/DEBUG
	new file:   example/env/ENVIROMENT
	new file:   example/env/TOKEN
	modified:   parser.go
  • Loading branch information
nbari committed Jul 31, 2016
1 parent 317030e commit 74d8659
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 50 deletions.
2 changes: 1 addition & 1 deletion cmd/immortal/main.go
Expand Up @@ -31,5 +31,5 @@ func main() {
// create a new daemon
// daemon = new(immortal.Daemon)

fmt.Println(cfg, fs.Args())
fmt.Printf("%v", cfg)
}
40 changes: 8 additions & 32 deletions config.go
@@ -1,59 +1,35 @@
package immortal

import (
"bufio"
"io/ioutil"
"os"
"os/user"
"path/filepath"
)

type Config struct {
Cmd string `yaml:"cmd" json:"cmd"`
Ctrl bool `yaml:"ctrl,omitempty"`
Cwd string `yaml:",omitempty" json:",omitempty"`
Env map[string]string `yaml:",omitempty" json:",omitempty"`
Pid map[string]string `yaml:",omitempty" json:",omitempty"`
Pid `yaml:",omitempty" json:",omitempty"`
Log `yaml:",omitempty" json:",omitempty"`
Logger string `yaml:",omitempty" json:",omitempty"`
User string `yaml:",omitempty" json:",omitempty"`
Wait int `yaml:",omitempty"`
user *user.User
}

type Pid struct {
Follow string `yaml:",omitempty"`
Parent string `yaml:",omitempty"`
Child string `yaml:",omitempty"`
}

type Log struct {
File string `yaml:",omitempty"`
Age int `yaml:",omitempty"`
Num int `yaml:",omitempty"`
Size int `yaml:",omitempty"`
}

func (self *Config) GetEnv(dir string) (map[string]string, error) {
files, err := ioutil.ReadDir(dir)
if err != nil {
return nil, err
}
env := make(map[string]string)
for _, f := range files {
if f.Mode().IsRegular() {
lines := 0
ff, err := os.Open(filepath.Join(dir, f.Name()))
if err != nil {
continue
}
defer ff.Close()
s := bufio.NewScanner(ff)
for s.Scan() {
if lines >= 1 {
break
}
env[f.Name()] = s.Text()
lines++
}
}
}
return env, nil
}

//func AA() {
//daemon := &Daemon{
//owner: u,
Expand Down
1 change: 1 addition & 0 deletions example/env/DEBUG
@@ -0,0 +1 @@
true
1 change: 1 addition & 0 deletions example/env/ENVIROMENT
@@ -0,0 +1 @@
production
1 change: 1 addition & 0 deletions example/env/TOKEN
@@ -0,0 +1 @@
ABC-123
99 changes: 82 additions & 17 deletions parser.go
@@ -1,14 +1,17 @@
package immortal

import (
"bufio"
"flag"
"fmt"
"github.com/immortal/natcasesort"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"os/user"
"path/filepath"
"sort"
"strings"
)

type Parser interface {
Expand All @@ -17,7 +20,7 @@ type Parser interface {
isFile(path string) bool
parseYml(file string) (*Config, error)
checkWrkdir(dir string) error
checkEnvdir(dir string) error
parseEnvdir(dir string) (map[string]string, error)
checkUser(user string) (*user.User, error)
}

Expand Down Expand Up @@ -87,11 +90,34 @@ func (self *Parse) checkWrkdir(dir string) (err error) {
return
}

func (self *Parse) checkEnvdir(dir string) (err error) {
func (self *Parse) parseEnvdir(dir string) (map[string]string, error) {
if !self.isDir(dir) {
err = fmt.Errorf("-e %q does not exist or has wrong permissions, use (\"%s -h\") for help.", dir, os.Args[0])
return nil, fmt.Errorf("-e %q does not exist or has wrong permissions, use (\"%s -h\") for help.", dir, os.Args[0])
}
return
files, err := ioutil.ReadDir(dir)
if err != nil {
return nil, err
}
env := make(map[string]string)
for _, f := range files {
if f.Mode().IsRegular() {
lines := 0
ff, err := os.Open(filepath.Join(dir, f.Name()))
if err != nil {
continue
}
defer ff.Close()
s := bufio.NewScanner(ff)
for s.Scan() {
if lines >= 1 {
break
}
env[f.Name()] = s.Text()
lines++
}
}
}
return env, nil
}

func (self *Parse) checkUser(u string) (usr *user.User, err error) {
Expand Down Expand Up @@ -160,39 +186,78 @@ func ParseArgs(p Parser, fs *flag.FlagSet) (cfg *Config, err error) {
if err != nil {
return
}
} else {
cfg = new(Config)
if cfg.Cwd != "" {
if err = p.checkWrkdir(cfg.Cwd); err != nil {
return
}
}
if cfg.User != "" {
if cfg.user, err = p.checkUser(cfg.User); err != nil {
return
}
}
return
}

// create new cfg if not using run.yml
cfg = new(Config)
cfg.Cmd = strings.Join(fs.Args(), " ")

// if -ctrl
if flags.Ctrl {
cfg.Ctrl = true
}

// if -d
if flags.Wrkdir != "" {
if err = p.checkWrkdir(flags.Wrkdir); err != nil {
return
}
}
if cfg.Cwd != "" {
if err = p.checkWrkdir(cfg.Cwd); err != nil {
return
}
cfg.Cwd = flags.Wrkdir
}

// if -e
if flags.Envdir != "" {
if err = p.checkEnvdir(flags.Envdir); err != nil {
if cfg.Env, err = p.parseEnvdir(flags.Envdir); err != nil {
return
}
}

// if -f
if flags.FollowPid != "" {
cfg.Follow = flags.FollowPid
}

// if -l
if flags.Logfile != "" {
cfg.File = flags.Logfile
}

// if -logger
if flags.Logger != "" {
cfg.Logger = flags.Logger
}

// if -P
if flags.ParentPid != "" {
cfg.Parent = flags.ParentPid
}

// if -p
if flags.ChildPid != "" {
cfg.Child = flags.ChildPid
}

// if -s
if flags.Seconds > 0 {
cfg.Wait = flags.Seconds
}

// if -u
if flags.User != "" {
if cfg.user, err = p.checkUser(flags.User); err != nil {
return
}
}
if cfg.User != "" {
if cfg.user, err = p.checkUser(cfg.User); err != nil {
return
}
}
return
}

0 comments on commit 74d8659

Please sign in to comment.