syslog.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package model
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "time"
  7. )
  8. type SysLog struct {
  9. Model
  10. }
  11. type SysLogRow struct {
  12. Id int64
  13. LogTime int64
  14. LogLevel string
  15. LogMsg string
  16. }
  17. func NewSysLog(db *sql.DB) *SysLog {
  18. return &SysLog{
  19. Model{
  20. db: db,
  21. },
  22. }
  23. }
  24. func (m *SysLog) Add(row *SysLogRow) (int64, error) {
  25. if row.LogMsg == "" {
  26. return 0, errors.New("日志内容不能为空")
  27. }
  28. if row.LogTime <= 0 {
  29. row.LogTime = time.Now().Unix()
  30. }
  31. ret, err := m.db.Exec("INSERT INTO syslog(log_time,log_level,log_msg) VALUES(?,?,?)", row.LogTime, row.LogLevel, row.LogMsg)
  32. if err != nil {
  33. return 0, err
  34. } else {
  35. return ret.LastInsertId()
  36. }
  37. }
  38. func (m *SysLog) CleanUntil(until int64) (int64, error) {
  39. ret, err := m.db.Exec("DELETE FROM syslog WHERE log_time<?", until)
  40. if err != nil {
  41. return 0, err
  42. } else {
  43. return ret.RowsAffected()
  44. }
  45. }
  46. func (m *SysLog) Count() (int64, error) {
  47. var cnt int64
  48. row := m.db.QueryRow("SELECT COUNT(*) FROM syslog")
  49. if err := row.Scan(&cnt); err != nil {
  50. return 0, err
  51. } else {
  52. return cnt, nil
  53. }
  54. }
  55. func (m *SysLog) GetList(offset int64, limit int64, orderDesc bool) ([]*SysLogRow, error) {
  56. var (
  57. orderDir string
  58. ret *sql.Rows
  59. err error
  60. )
  61. if orderDesc {
  62. orderDir = "DESC"
  63. } else {
  64. orderDir = "ASC"
  65. }
  66. if limit > 0 {
  67. sql := fmt.Sprintf("SELECT id,log_time,log_level,log_msg FROM syslog ORDER BY id %s LIMIT ?,?", orderDir)
  68. ret, err = m.db.Query(sql, offset, limit)
  69. } else {
  70. sql := fmt.Sprintf("SELECT id,log_time,log_level,log_msg FROM syslog ORDER BY id %s", orderDir)
  71. ret, err = m.db.Query(sql)
  72. }
  73. if err != nil {
  74. return nil, err
  75. } else {
  76. rows := make([]*SysLogRow, 0)
  77. for ret.Next() {
  78. row := SysLogRow{}
  79. err = ret.Scan(&row.Id, &row.LogTime, &row.LogLevel, &row.LogMsg)
  80. if err != nil {
  81. continue
  82. }
  83. rows = append(rows, &row)
  84. }
  85. return rows, nil
  86. }
  87. }