Feat: finish multi interface parser and make the cli app work
This commit is contained in:
parent
707a82e2a6
commit
2e7b11999c
@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
eth0 := &iface.NetworkInterface{}
|
||||
ifaces := iface.NewMultiParser()
|
||||
switch {
|
||||
case len(os.Args) < 2:
|
||||
buf := &bytes.Buffer{}
|
||||
@ -31,7 +31,7 @@ func main() {
|
||||
break
|
||||
}
|
||||
}
|
||||
n, err := eth0.Write(buf.Bytes())
|
||||
n, err := ifaces.Write(buf.Bytes())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -43,7 +43,7 @@ func main() {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
n, err := eth0.Write(dat)
|
||||
n, err := ifaces.Write(dat)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -51,12 +51,22 @@ func main() {
|
||||
panic("short write")
|
||||
}
|
||||
}
|
||||
dat, err := json.MarshalIndent(eth0, "", "\t")
|
||||
imap, err := ifaces.Parse()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err = eth0.Validate(); err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
for _, netif := range imap {
|
||||
if netif == nil {
|
||||
continue
|
||||
}
|
||||
if err = netif.Validate(); err != nil {
|
||||
println(netif.Name + " skip due to error: " + err.Error())
|
||||
delete(imap, netif.Name)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
dat, err := json.MarshalIndent(imap, "", "\t")
|
||||
_, _ = os.Stdout.Write(dat)
|
||||
}
|
||||
|
12
ifaces.go
12
ifaces.go
@ -9,6 +9,8 @@ import (
|
||||
"git.tcp.direct/kayos/common/pool"
|
||||
)
|
||||
|
||||
type Interfaces map[string]*NetworkInterface
|
||||
|
||||
type poolGroup struct {
|
||||
Buffers pool.BufferFactory
|
||||
Strs pool.StringFactory
|
||||
@ -20,22 +22,28 @@ type MultiParser struct {
|
||||
Interfaces map[string]*NetworkInterface
|
||||
Errs []error
|
||||
buf []byte
|
||||
mu *sync.Mutex
|
||||
}
|
||||
|
||||
func NewMultiParser() *MultiParser {
|
||||
return &MultiParser{
|
||||
Interfaces: make(map[string]*NetworkInterface),
|
||||
Interfaces: make(Interfaces),
|
||||
Errs: make([]error, 0),
|
||||
buf: make([]byte, 0),
|
||||
mu: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
func (p *MultiParser) Write(data []byte) (int, error) {
|
||||
p.mu.Lock()
|
||||
p.buf = append(p.buf, data...)
|
||||
p.mu.Unlock()
|
||||
return len(data), nil
|
||||
}
|
||||
|
||||
func (p *MultiParser) Parse() error {
|
||||
func (p *MultiParser) Parse() (Interfaces, error) {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
scanner := bufio.NewScanner(strings.NewReader(string(p.buf)))
|
||||
|
||||
index := 0
|
||||
|
Loading…
Reference in New Issue
Block a user