global_syslog.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. package bo
  2. import (
  3. "fmt"
  4. "rtzh_elec_temperature/enum"
  5. "rtzh_elec_temperature/logger"
  6. "rtzh_elec_temperature/tools"
  7. "strconv"
  8. "strings"
  9. "github.com/astaxie/beego/orm"
  10. _ "github.com/astaxie/beego/orm"
  11. )
  12. //系统操作日志管理
  13. type SystemLog struct {
  14. UserInfo map[string]interface{}
  15. //操作分类
  16. Logtype enum.LogType
  17. //审计分类
  18. Audittype enum.AuditType
  19. //事件分类
  20. Eventtype enum.OptEventType
  21. //事件等级
  22. Eventlevel enum.OptEventLevel
  23. //日志内容
  24. Description string
  25. }
  26. type Global_syslog struct {
  27. Id int64 `orm:"pk;auto"`
  28. Insdate string `orm:"size(20)"`
  29. Description string `orm:"size(500)"`
  30. Staff string `orm:"size(50)"`
  31. //操作分类
  32. Logtype int
  33. //审计分类
  34. Audittype int
  35. //事件分类
  36. Eventtype int
  37. //事件等级
  38. Eventlevel int
  39. Success int
  40. Ip string
  41. }
  42. func init() {
  43. orm.RegisterModel(new(Global_syslog))
  44. }
  45. //操作失败日志记录
  46. //该方法通过属性设置方式完成属性值的赋予
  47. func (c *SystemLog) Fail2() {
  48. c.Fail(c.Audittype, c.Logtype, c.Eventtype, c.Eventlevel, c.Description, c.UserInfo)
  49. }
  50. //操作失败日志记录
  51. //该方法通过参数方式完成属性值的赋予
  52. func (c *SystemLog) Fail(module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, desc string, uinfo ...map[string]interface{}) {
  53. if c.UserInfo == nil {
  54. if len(uinfo) > 0 {
  55. c.UserInfo = uinfo[0]
  56. } else {
  57. logger.Logger.Error("写日志记录失败:未指定的当前用户对象")
  58. return
  59. }
  60. }
  61. username := tools.IsEmpty(c.UserInfo["name"])
  62. if username == "" {
  63. username = "系统内置用户"
  64. }
  65. go SaveSyslog(desc, module, logtype, event, eventlevel, enum.OptResult_Fail, username, tools.IsEmpty(c.UserInfo["ip"]))
  66. }
  67. //操作成功日志记录
  68. //该方法通过属性设置方式完成属性值的赋予
  69. func (c *SystemLog) Success2() {
  70. c.Success(c.Audittype, c.Logtype, c.Eventtype, c.Eventlevel, c.Description, c.UserInfo)
  71. }
  72. //操作成功日志记录
  73. //该方法通过参数方式完成属性值的赋予
  74. func (c *SystemLog) Success(module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, desc string, uinfo ...map[string]interface{}) {
  75. if c.UserInfo == nil {
  76. if len(uinfo) > 0 {
  77. c.UserInfo = uinfo[0]
  78. } else {
  79. logger.Logger.Error("写日志记录失败:未指定的当前用户对象")
  80. return
  81. }
  82. }
  83. username := tools.IsEmpty(c.UserInfo["name"])
  84. if username == "" {
  85. username = "系统内置用户"
  86. }
  87. go SaveSyslog(desc, module, logtype, event, eventlevel, enum.OptResult_Success, username, tools.IsEmpty(c.UserInfo["ip"]))
  88. }
  89. //清除所有日志数据
  90. func ClearAllSyslog() (err error) {
  91. o := orm.NewOrm()
  92. sqlCommandText := "delete from global_syslog"
  93. _, err = o.Raw(sqlCommandText).Exec()
  94. if err != nil {
  95. return err
  96. } else {
  97. return nil
  98. }
  99. }
  100. //根据日志配置(如存储时长、容量限制等)自动清除符合条件的日志数据
  101. func ClearSyslog(clearbeforedate string) (err error) {
  102. o := orm.NewOrm()
  103. sqlCommandText := "delete from global_syslog where insdate<?"
  104. _, err = o.Raw(sqlCommandText, clearbeforedate).Exec()
  105. dblog := new(SystemLog)
  106. dblog.UserInfo = map[string]interface{}{"name": "", "ip": "127.0.0.1"}
  107. dblog.Audittype = enum.AuditType_admin_system_logclear
  108. dblog.Logtype = enum.LogType_Delete
  109. dblog.Eventtype = enum.OptEventType_System
  110. dblog.Eventlevel = enum.OptEventLevel_Hight
  111. sqllog := fmt.Sprintf("SQL:%s 参数:%s", sqlCommandText, clearbeforedate)
  112. if err != nil {
  113. logger.Logger.Error(err, sqllog)
  114. dblog.Description = sqllog
  115. dblog.Fail2()
  116. return err
  117. } else {
  118. dblog.Description = sqllog
  119. dblog.Fail2()
  120. return nil
  121. }
  122. }
  123. //保存操作日志记录。(已过时,建议使用SystemLog对象的Fail/Success方法代替)
  124. func SaveSyslog(desc string, module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, state enum.OptResult, staff string, ip ...string) (result int64, err error) {
  125. o := orm.NewOrm()
  126. var obj = Global_syslog{
  127. Description: desc,
  128. Audittype: int(module),
  129. Logtype: int(logtype),
  130. Eventtype: int(event),
  131. Eventlevel: int(eventlevel),
  132. Success: int(state),
  133. Staff: staff,
  134. Insdate: tools.NowTime(),
  135. }
  136. if len(ip) > 0 {
  137. obj.Ip = ip[0]
  138. }
  139. var id int64
  140. id, err = o.Insert(&obj)
  141. if err != nil {
  142. logger.Logger.Error(err)
  143. }
  144. return id, err
  145. }
  146. //查询系统日志
  147. func (c *SystemLog) SearchLogList(cond map[string]string, pageIndex, pageSize int) ([]orm.Params, int, error) {
  148. o := orm.NewOrm()
  149. var totalSql string
  150. var sqlCondition []string
  151. var sqlParameter []interface{}
  152. var sqlCommandText = `
  153. select t.*,t1.name audittypename,t2.name logtypename,t3.name eventtypename,t4.name optresultname,t5.name eventlevelname
  154. from global_syslog t left join global_const_code t1 on t.audittype=t1.code and t1.parentcode='log_audittype'
  155. left join global_const_code t2 on t.logtype=t2.code and t2.parentcode='log_opttype'
  156. left join global_const_code t3 on t.eventtype=t3.code and t3.parentcode='log_eventtype'
  157. left join global_const_code t4 on t.success=t4.code and t4.parentcode='log_optresult'
  158. left join global_const_code t5 on t.eventlevel=t5.code and t5.parentcode='log_eventlevel'
  159. `
  160. endDate := cond["enddate"]
  161. if endDate != "" {
  162. endDate += " 23:59:59"
  163. }
  164. startDate := cond["startdate"]
  165. if startDate != "" && endDate != "" {
  166. sqlCondition = append(sqlCondition, "t.insdate between ? and ? ")
  167. sqlParameter = append(sqlParameter, startDate+" 00:00:00", endDate)
  168. } else if startDate != "" {
  169. sqlCondition = append(sqlCondition, "t.insdate>=? ")
  170. sqlParameter = append(sqlParameter, startDate+" 00:00:00")
  171. } else if endDate != "" {
  172. sqlCondition = append(sqlCondition, "t.insdate<=? ")
  173. sqlParameter = append(sqlParameter, endDate)
  174. }
  175. description := cond["description"]
  176. if description != "" {
  177. sqlCondition = append(sqlCondition, "t.description like concat('%',?,'%')")
  178. sqlParameter = append(sqlParameter, description)
  179. }
  180. success := cond["success"]
  181. if success != "" {
  182. sqlCondition = append(sqlCondition, "t.success=?")
  183. sqlParameter = append(sqlParameter, success)
  184. }
  185. logtype := cond["logtype"]
  186. if logtype != "" {
  187. sqlCondition = append(sqlCondition, "t.logtype=?")
  188. sqlParameter = append(sqlParameter, logtype)
  189. }
  190. audittype := cond["audittype"]
  191. if audittype != "" {
  192. sqlCondition = append(sqlCondition, "t.audittype=?")
  193. sqlParameter = append(sqlParameter, audittype)
  194. }
  195. eventtype := cond["eventtype"]
  196. if eventtype != "" {
  197. sqlCondition = append(sqlCondition, "t.eventtype=?")
  198. sqlParameter = append(sqlParameter, eventtype)
  199. }
  200. eventlevel := cond["eventlevel"]
  201. if eventlevel != "" {
  202. sqlCondition = append(sqlCondition, "t.eventlevel=?")
  203. sqlParameter = append(sqlParameter, eventlevel)
  204. }
  205. if len(sqlCondition) > 0 {
  206. sqlCommandText += " where " + strings.Join(sqlCondition, " and ")
  207. totalSql = "select count(1) number from global_syslog t where " + strings.Join(sqlCondition, " and ")
  208. } else {
  209. totalSql = "select count(1) number from global_syslog t "
  210. }
  211. var limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize)
  212. sqlCommandText += " order by t.id desc " + limit
  213. var tableData []orm.Params
  214. var number int
  215. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData)
  216. c.Audittype = enum.AuditType_admin_system_logquery
  217. c.Logtype = enum.LogType_Query
  218. c.Eventtype = enum.OptEventType_Bus
  219. c.Eventlevel = enum.OptEventLevel_Hight
  220. sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sqlCommandText, sqlParameter)
  221. c.Description = sqllog
  222. if err == nil {
  223. c.Success2()
  224. if len(tableData) > 0 {
  225. var totalData []orm.Params
  226. _, err = o.Raw(totalSql, sqlParameter).Values(&totalData)
  227. if err == nil {
  228. number, _ = strconv.Atoi(totalData[0]["number"].(string))
  229. }
  230. }
  231. } else {
  232. c.Fail2()
  233. }
  234. return tableData, number, err
  235. }