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() {
|
func main() {
|
||||||
eth0 := &iface.NetworkInterface{}
|
ifaces := iface.NewMultiParser()
|
||||||
switch {
|
switch {
|
||||||
case len(os.Args) < 2:
|
case len(os.Args) < 2:
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
@ -31,7 +31,7 @@ func main() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n, err := eth0.Write(buf.Bytes())
|
n, err := ifaces.Write(buf.Bytes())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
n, err := eth0.Write(dat)
|
n, err := ifaces.Write(dat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -51,12 +51,22 @@ func main() {
|
|||||||
panic("short write")
|
panic("short write")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dat, err := json.MarshalIndent(eth0, "", "\t")
|
imap, err := ifaces.Parse()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err = eth0.Validate(); err != nil {
|
|
||||||
println(err.Error())
|
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)
|
_, _ = os.Stdout.Write(dat)
|
||||||
}
|
}
|
||||||
|
12
ifaces.go
12
ifaces.go
@ -9,6 +9,8 @@ import (
|
|||||||
"git.tcp.direct/kayos/common/pool"
|
"git.tcp.direct/kayos/common/pool"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Interfaces map[string]*NetworkInterface
|
||||||
|
|
||||||
type poolGroup struct {
|
type poolGroup struct {
|
||||||
Buffers pool.BufferFactory
|
Buffers pool.BufferFactory
|
||||||
Strs pool.StringFactory
|
Strs pool.StringFactory
|
||||||
@ -20,22 +22,28 @@ type MultiParser struct {
|
|||||||
Interfaces map[string]*NetworkInterface
|
Interfaces map[string]*NetworkInterface
|
||||||
Errs []error
|
Errs []error
|
||||||
buf []byte
|
buf []byte
|
||||||
|
mu *sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMultiParser() *MultiParser {
|
func NewMultiParser() *MultiParser {
|
||||||
return &MultiParser{
|
return &MultiParser{
|
||||||
Interfaces: make(map[string]*NetworkInterface),
|
Interfaces: make(Interfaces),
|
||||||
Errs: make([]error, 0),
|
Errs: make([]error, 0),
|
||||||
buf: make([]byte, 0),
|
buf: make([]byte, 0),
|
||||||
|
mu: &sync.Mutex{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *MultiParser) Write(data []byte) (int, error) {
|
func (p *MultiParser) Write(data []byte) (int, error) {
|
||||||
|
p.mu.Lock()
|
||||||
p.buf = append(p.buf, data...)
|
p.buf = append(p.buf, data...)
|
||||||
|
p.mu.Unlock()
|
||||||
return len(data), nil
|
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)))
|
scanner := bufio.NewScanner(strings.NewReader(string(p.buf)))
|
||||||
|
|
||||||
index := 0
|
index := 0
|
||||||
|
Loading…
Reference in New Issue
Block a user