metric 서비스 복원
This commit is contained in:
40
client/pipe_reader_linux.go
Normal file
40
client/pipe_reader_linux.go
Normal file
@ -0,0 +1,40 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||
)
|
||||
|
||||
func (r *pipeListener) listen(ctx context.Context) {
|
||||
mode := 0666 // 읽기/쓰기 권한
|
||||
pipeName := "/tmp/" + r.config.MetricPipeName
|
||||
|
||||
os.Remove(pipeName)
|
||||
if err := unix.Mkfifo(pipeName, uint32(mode)); err != nil {
|
||||
logger.Println("mkfifo failed :", pipeName, err)
|
||||
return
|
||||
}
|
||||
defer os.Remove(pipeName)
|
||||
|
||||
go func() {
|
||||
// file에 쓰기 핸들을 하나 열고 ctx가 Done일 때 닫음. 이래야 reader가 계속 열려있게 됨
|
||||
f, err := os.OpenFile(pipeName, os.O_WRONLY, 0)
|
||||
if err != nil {
|
||||
logger.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
<-ctx.Done()
|
||||
f.Close()
|
||||
}()
|
||||
|
||||
file, err := os.Open(pipeName)
|
||||
if err != nil {
|
||||
logger.Println("FIFO open error:", err)
|
||||
return
|
||||
}
|
||||
r.startReader(file)
|
||||
}
|
||||
Reference in New Issue
Block a user