storeWriter writes the data to the store (file, kafka, elastic) this can be refactored to make it more readable and scalable with improved interface and probably use of structure http data instead of raw bytes
(outputdata types.HTTPTransaction)
| 257 | // with improved interface and probably use of structure http data |
| 258 | // instead of raw bytes |
| 259 | func (l *Logger) storeWriter(outputdata types.HTTPTransaction) { |
| 260 | if !l.options.DumpRequest && !l.options.DumpResponse { |
| 261 | outputdata.PartSuffix = "" |
| 262 | } else if l.options.DumpRequest && !outputdata.Userdata.HasResponse { |
| 263 | outputdata.PartSuffix = ".request" |
| 264 | } else if l.options.DumpResponse && outputdata.Userdata.HasResponse { |
| 265 | outputdata.PartSuffix = ".response" |
| 266 | } else { |
| 267 | return |
| 268 | } |
| 269 | outputdata.Name = fmt.Sprintf("%s%s-%s", outputdata.Userdata.Host, outputdata.PartSuffix, outputdata.Userdata.ID) |
| 270 | if outputdata.Userdata.HasResponse && (!l.options.DumpRequest && !l.options.DumpResponse) { |
| 271 | if outputdata.Userdata.Match != nil && *outputdata.Userdata.Match { |
| 272 | outputdata.Name = outputdata.Name + ".match" |
| 273 | } |
| 274 | } |
| 275 | outputdata.Format = dataWithoutNewLine |
| 276 | if !strings.HasSuffix(string(outputdata.Data), "\n") { |
| 277 | outputdata.Format = dataWithNewLine |
| 278 | } |
| 279 | |
| 280 | outputdata.DataString = fmt.Sprintf(outputdata.Format, outputdata.Data) |
| 281 | if outputdata.Userdata.HasResponse { |
| 282 | outputdata.Format = "\n" + outputdata.Format |
| 283 | } |
| 284 | outputdata.RawData = []byte(fmt.Sprintf(outputdata.Format, outputdata.RawData)) |
| 285 | |
| 286 | if l.options.MaxSize > 0 { |
| 287 | outputdata.DataString = stringsutil.Truncate(outputdata.DataString, l.options.MaxSize) |
| 288 | outputdata.RawData = []byte(stringsutil.Truncate(string(outputdata.RawData), l.options.MaxSize)) |
| 289 | } |
| 290 | for _, store := range l.Store { |
| 291 | err := store.Save(outputdata) |
| 292 | if err != nil { |
| 293 | gologger.Warning().Msgf("Error while logging: %s", err) |
| 294 | } |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | func isASCIICheckRequired(contentType string) bool { |
| 299 | return stringsutil.ContainsAny(contentType, "application/octet-stream", "application/x-www-form-urlencoded") |