Files

40 lines
725 B
Go

package parser
import (
"bufio"
"errors"
"fmt"
"os"
"os/exec"
)
func ParseFile(path string) (Parser, error) {
if path == "" {
return Parser{}, errors.New("path cannot be empty")
}
if _, err := os.Stat(path); os.IsNotExist(err) {
return Parser{}, fmt.Errorf("file does not exist: %s", path)
}
cmd := exec.Command("tail", "-F", "-n", "10", path)
stdout, err := cmd.StdoutPipe()
if err != nil {
return Parser{}, fmt.Errorf("stdout pipe error: %w", err)
}
if err := cmd.Start(); err != nil {
return Parser{}, fmt.Errorf("failed to start tail parser: %w", err)
}
p := Parser{
parser: bufio.NewScanner(stdout),
ch: make(chan string, 100),
cmd: cmd,
file: &path,
}
return p, nil
}