utils.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package types
  2. import (
  3. "encoding/binary"
  4. "fmt"
  5. "io"
  6. "net"
  7. log "github.com/sirupsen/logrus"
  8. "gopkg.in/natefinch/lumberjack.v2"
  9. )
  10. func IP2Int(ip net.IP) uint32 {
  11. if len(ip) == 16 {
  12. return binary.BigEndian.Uint32(ip[12:16])
  13. }
  14. return binary.BigEndian.Uint32(ip)
  15. }
  16. func Int2ip(nn uint32) net.IP {
  17. ip := make(net.IP, 4)
  18. binary.BigEndian.PutUint32(ip, nn)
  19. return ip
  20. }
  21. //Stolen from : https://github.com/llimllib/ipaddress/
  22. // Return the final address of a net range. Convert to IPv4 if possible,
  23. // otherwise return an ipv6
  24. func LastAddress(n *net.IPNet) net.IP {
  25. ip := n.IP.To4()
  26. if ip == nil {
  27. ip = n.IP
  28. return net.IP{
  29. ip[0] | ^n.Mask[0], ip[1] | ^n.Mask[1], ip[2] | ^n.Mask[2],
  30. ip[3] | ^n.Mask[3], ip[4] | ^n.Mask[4], ip[5] | ^n.Mask[5],
  31. ip[6] | ^n.Mask[6], ip[7] | ^n.Mask[7], ip[8] | ^n.Mask[8],
  32. ip[9] | ^n.Mask[9], ip[10] | ^n.Mask[10], ip[11] | ^n.Mask[11],
  33. ip[12] | ^n.Mask[12], ip[13] | ^n.Mask[13], ip[14] | ^n.Mask[14],
  34. ip[15] | ^n.Mask[15]}
  35. }
  36. return net.IPv4(
  37. ip[0]|^n.Mask[0],
  38. ip[1]|^n.Mask[1],
  39. ip[2]|^n.Mask[2],
  40. ip[3]|^n.Mask[3])
  41. }
  42. var logFormatter log.Formatter
  43. var logOutput io.Writer
  44. var logLevel log.Level
  45. var logReportCaller bool
  46. func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level) error {
  47. /*Configure logs*/
  48. if cfgMode == "file" {
  49. logOutput = &lumberjack.Logger{
  50. Filename: cfgFolder + "/crowdsec.log",
  51. MaxSize: 500, //megabytes
  52. MaxBackups: 3,
  53. MaxAge: 28, //days
  54. Compress: true, //disabled by default
  55. }
  56. log.SetOutput(logOutput)
  57. } else if cfgMode != "stdout" {
  58. return fmt.Errorf("log mode '%s' unknown", cfgMode)
  59. }
  60. logLevel = cfgLevel
  61. log.SetLevel(logLevel)
  62. if logLevel >= log.InfoLevel {
  63. logFormatter = &log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true}
  64. log.SetFormatter(logFormatter)
  65. }
  66. if logLevel >= log.DebugLevel {
  67. logReportCaller = true
  68. log.SetReportCaller(true)
  69. }
  70. return nil
  71. }
  72. func ConfigureLogger(clog *log.Logger) error {
  73. /*Configure logs*/
  74. if logOutput != nil {
  75. clog.SetOutput(logOutput)
  76. }
  77. if logReportCaller {
  78. clog.SetReportCaller(true)
  79. }
  80. if logFormatter != nil {
  81. clog.SetFormatter(logFormatter)
  82. }
  83. clog.SetLevel(logLevel)
  84. return nil
  85. }