(filename string, filesize int, logger *slog.Logger)
| 96 | } |
| 97 | |
| 98 | func getRequestMMappedFile(filename string, filesize int, logger *slog.Logger) ([]byte, io.Closer, error) { |
| 99 | file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o666) |
| 100 | if err != nil { |
| 101 | absPath, pathErr := filepath.Abs(filename) |
| 102 | if pathErr != nil { |
| 103 | absPath = filename |
| 104 | } |
| 105 | logger.Error("Error opening request log file", "file", absPath, "err", err) |
| 106 | return nil, nil, err |
| 107 | } |
| 108 | |
| 109 | err = file.Truncate(int64(filesize)) |
| 110 | if err != nil { |
| 111 | file.Close() |
| 112 | logger.Error("Error setting filesize.", "filesize", filesize, "err", err) |
| 113 | return nil, nil, err |
| 114 | } |
| 115 | |
| 116 | fileAsBytes, err := mmap.Map(file, mmap.RDWR, 0) |
| 117 | if err != nil { |
| 118 | file.Close() |
| 119 | logger.Error("Failed to mmap", "file", filename, "Attempted size", filesize, "err", err) |
| 120 | return nil, nil, err |
| 121 | } |
| 122 | |
| 123 | return fileAsBytes, &mmappedRequestFile{f: file, m: fileAsBytes}, err |
| 124 | } |
| 125 | |
| 126 | func NewRequestTracker(localStoragePath string, fileName string, maxConcurrent int, logger *slog.Logger) *RequestTracker { |
| 127 | if localStoragePath == "" { |
no test coverage detected