warnlog.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package model
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "time"
  7. )
  8. type WarnLog struct {
  9. Model
  10. }
  11. type WarnLogRow struct {
  12. Id int64
  13. RedisId int64
  14. RedisAddress string
  15. RedisRemark string
  16. WarnTime int64
  17. WarnMsg string
  18. }
  19. func NewWarnLog(db *sql.DB) *WarnLog {
  20. return &WarnLog{
  21. Model{
  22. db: db,
  23. },
  24. }
  25. }
  26. func (m *WarnLog) Add(row *WarnLogRow) (int64, error) {
  27. if row.RedisId <= 0 {
  28. return 0, errors.New("Redis的ID必须是正整数")
  29. }
  30. if row.WarnMsg == "" {
  31. return 0, errors.New("报警内容不能为空")
  32. }
  33. if row.WarnTime <= 0 {
  34. row.WarnTime = time.Now().Unix()
  35. }
  36. ret, err := m.db.Exec("INSERT INTO warnlog(redis_id,warn_time,warn_msg) VALUES(?,?,?)", row.RedisId, row.WarnTime, row.WarnMsg)
  37. if err != nil {
  38. return 0, err
  39. } else {
  40. return ret.LastInsertId()
  41. }
  42. }
  43. func (m *WarnLog) CleanUntil(until int64) (int64, error) {
  44. ret, err := m.db.Exec("DELETE FROM warnlog WHERE warn_time<?", until)
  45. if err != nil {
  46. return 0, err
  47. } else {
  48. return ret.RowsAffected()
  49. }
  50. }
  51. func (m *WarnLog) Count(redisId int64) (int64, error) {
  52. var (
  53. row *sql.Row
  54. cnt int64
  55. )
  56. if redisId == 0 {
  57. row = m.db.QueryRow("SELECT COUNT(*) FROM warnlog")
  58. } else {
  59. row = m.db.QueryRow("SELECT COUNT(*) FROM warnlog WHERE redis_id=?", redisId)
  60. }
  61. if err := row.Scan(&cnt); err != nil {
  62. return 0, err
  63. } else {
  64. return cnt, nil
  65. }
  66. }
  67. func (m *WarnLog) GetList(redisId int64, offset int64, limit int64, orderDesc bool) ([]*WarnLogRow, error) {
  68. var (
  69. orderDir string
  70. ret *sql.Rows
  71. err error
  72. )
  73. if orderDesc {
  74. orderDir = "DESC"
  75. } else {
  76. orderDir = "ASC"
  77. }
  78. if redisId == 0 {
  79. if limit > 0 {
  80. sql := fmt.Sprintf("SELECT warnlog.id,warnlog.redis_id,warnlog.warn_time,warnlog.warn_msg,rediscfg.address,rediscfg.remark FROM warnlog INNER JOIN rediscfg ON warnlog.redis_id=rediscfg.id ORDER BY warnlog.id %s LIMIT ?,?", orderDir)
  81. ret, err = m.db.Query(sql, offset, limit)
  82. } else {
  83. sql := fmt.Sprintf("SELECT warnlog.id,warnlog.redis_id,warnlog.warn_time,warnlog.warn_msg,rediscfg.address,rediscfg.remark FROM warnlog INNER JOIN rediscfg ON warnlog.redis_id=rediscfg.id ORDER BY warnlog.id %s", orderDir)
  84. ret, err = m.db.Query(sql)
  85. }
  86. } else {
  87. if limit > 0 {
  88. sql := fmt.Sprintf("SELECT warnlog.id,warnlog.redis_id,warnlog.warn_time,warnlog.warn_msg,rediscfg.address,rediscfg.remark FROM warnlog INNER JOIN rediscfg ON warnlog.redis_id=rediscfg.id WHERE warnlog.redis_id=? ORDER BY warnlog.id %s LIMIT ?,?", orderDir)
  89. ret, err = m.db.Query(sql, redisId, offset, limit)
  90. } else {
  91. sql := fmt.Sprintf("SELECT warnlog.id,warnlog.redis_id,warnlog.warn_time,warnlog.warn_msg,rediscfg.address,rediscfg.remark FROM warnlog INNER JOIN rediscfg ON warnlog.redis_id=rediscfg.id WHERE warnlog.redis_id=? ORDER BY warnlog.id %s", orderDir)
  92. ret, err = m.db.Query(sql, redisId)
  93. }
  94. }
  95. if err != nil {
  96. return nil, err
  97. } else {
  98. rows := make([]*WarnLogRow, 0)
  99. for ret.Next() {
  100. row := WarnLogRow{}
  101. err = ret.Scan(&row.Id, &row.RedisId, &row.WarnTime, &row.WarnMsg, &row.RedisAddress, &row.RedisRemark)
  102. if err != nil {
  103. continue
  104. }
  105. rows = append(rows, &row)
  106. }
  107. return rows, nil
  108. }
  109. }