Files
monibuca/plugin/logrotate/api.go
2024-05-07 08:58:21 +08:00

60 lines
1.4 KiB
Go

package plugin_logrotate
import (
"context"
"io"
"net/http"
"os"
"path/filepath"
"github.com/phsym/console-slog"
"google.golang.org/protobuf/types/known/emptypb"
"m7s.live/m7s/v5/pkg/util"
"m7s.live/m7s/v5/plugin/logrotate/pb"
)
func (h *LogRotatePlugin) List(context.Context, *emptypb.Empty) (*pb.ResponseFileInfo, error) {
dir, err := os.Open(h.Path)
if err == nil {
var files []os.FileInfo
if files, err = dir.Readdir(0); err == nil {
var fileInfos []*pb.FileInfo
for _, info := range files {
fileInfos = append(fileInfos, &pb.FileInfo{
Name: info.Name(), Size: info.Size(),
})
}
return &pb.ResponseFileInfo{Files: fileInfos}, nil
}
}
return nil, err
}
func (h *LogRotatePlugin) Get(_ context.Context, req *pb.RequestFileInfo) (res *pb.ResponseOpen, err error) {
file, err1 := os.Open(filepath.Join(h.Path, req.FileName))
if err1 == nil {
defer file.Close()
res = &pb.ResponseOpen{}
content, err2 := io.ReadAll(file)
if err2 == nil {
res.Content = string(content)
} else {
err = err2
}
} else {
err = err1
}
return
}
func (h *LogRotatePlugin) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
func (l *LogRotatePlugin) API_tail(w http.ResponseWriter, r *http.Request) {
writer := util.NewSSE(w, r.Context())
h := console.NewHandler(writer, &console.HandlerOptions{NoColor: true})
l.PostToServer(h)
<-r.Context().Done()
}