snsi.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package generic
  2. import (
  3. "encoding/csv"
  4. "fmt"
  5. "log"
  6. "os"
  7. "path/filepath"
  8. "time"
  9. kcp "github.com/johnsonjh/gfcp"
  10. )
  11. // SnsiLogger ...
  12. func SnsiLogger(path string, interval int) {
  13. if path == "" || interval == 0 {
  14. return
  15. }
  16. ticker := time.NewTicker(time.Duration(interval) * time.Second)
  17. defer ticker.Stop()
  18. for {
  19. select {
  20. case <-ticker.C:
  21. // split path into dirname and filename
  22. logdir, logfile := filepath.Split(path)
  23. // only format logfile
  24. f, err := os.OpenFile(logdir+time.Now().Format(logfile), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666)
  25. if err != nil {
  26. log.Println(err)
  27. return
  28. }
  29. w := csv.NewWriter(f)
  30. // write header in empty file
  31. if stat, err := f.Stat(); err == nil && stat.Size() == 0 {
  32. if err := w.Write(append([]string{"Unix"}, kcp.DefaultSnsi.Header()...)); err != nil {
  33. log.Println(err)
  34. }
  35. }
  36. if err := w.Write(append([]string{fmt.Sprint(time.Now().Unix())}, kcp.DefaultSnsi.ToSlice()...)); err != nil {
  37. log.Println(err)
  38. }
  39. // kcp.DefaultSnsi.Reset()
  40. w.Flush()
  41. f.Close()
  42. }
  43. }
  44. }