首页 > 其他分享 >获取发布日志并通知

获取发布日志并通知

时间:2022-09-30 22:45:46浏览次数:39  
标签:log 通知 ID content 获取 日志 id Dir

获取发布日志并通知   想想都是泪,我竟然加班到现在 = =,明天就是国庆!!!   我下班的时候领导是这么说的(上面还有个钉钉电话 = =),非得要我搞出来,逻辑有点问题,算是搞好了       话说这个需求源于周二的一个会议:业主方说对于xxx网,你们不能只是想到外部攻击,还要想想可能是内部人员没管理好,导致发了些不良的文章到线上。于是就有了这个需求:从一个叫 jeecms 的发布操作日志拿到最新信息,发到钉钉群。  

    我发现这个内容是可以从数据库里查出来的。

  所以目的就是,有新增日志信息才发,发过的信息不要重复发(今天不讲过多细节,只贴代码)

  首先这个 ID 是唯一的,所以重复信息我们可以根据这个 ID 去判断

     sql查询要做表关联,因为日志表只有这个登录用户的 ID,账号名是没有的

        注意 shell 传参如果有空格会被截断,所以里面有空格过滤。。。其他明天之后再说

#!/bin/bash

Dir='/home/xxx/xxx-content'
log_path=`date +"%Y%m"`
d=`date +"%d"`
ymd=`date +"%Y-%m-%d"`

Ymd_Dir=${Dir}/${log_path}/${d}

## 每天一个年月日表
[ ! -d ${Ymd_Dir} ] && mkdir -p ${Ymd_Dir}

ID_SNew=${Ymd_Dir}/logid_new_src

ID_New=${Ymd_Dir}/logid_new
ID_Old=${Ymd_Dir}/logid_old

#ID文件,不存在则创建
[ ! -f ${ID_Old} ] && touch ${ID_Old} 

#内容文件
Ct_SNew=${Ymd_Dir}/content_src
Ct_New=${Ymd_Dir}/content_new

cd ${Ymd_Dir}

## 当天0点
begin_time=`date +"%Y-%m-%d 00:00:00"`

## 当前检测时间
end_time=`date +"%Y-%m-%d %H:%M:%S"`

## ljy的测试群
token1='钉钉token'

## 公司群
token2='钉钉token'

# 发钉钉群
function SendMessageToDingdingljy(){
    Dingding_Url=https://oapi.dingtalk.com/robot/send?access_token=$1
    d_t=`date "+%F"_"%T"`
    #d_t=`date +"%T"`
    User=$2
    Time=$3
    Title=$4
    Content=$5

    
    #发送钉钉消息
    curl -H "Content-Type: application/json" -X POST --data '
    {
     "msgtype": "text",
     "text": {
         "content":
             "------ xxx网 ------
             \r检测时间:'${d_t}'
             \r登录用户:'${User}'
             \r用户操作时间:'${Time}'
             \r标题:'${Title}' '${Content}'
     "},
     "at": {
         "atMobiles": [
             "我的手机号码"
         ],
         "isAtAll": false
     }
}' ${Dingding_Url} > /dev/null 2>&1
}


## 1、查 日志id(唯一):今天0点~当前检测而时间
mysql -u{数据库登录用户} -p'{数据库登录密码}' -h{数据库登录地址} -e "use {数据库名}; select {日志ID} from {日志表} where {时间字段} >= '$begin_time' AND {时间字段} <= '$end_time' order by {时间字段} desc;" > ${ID_SNew}


#去掉首行无用行,只要查出来的id
cat ${ID_SNew} |grep -v "log_id" > ${ID_New}


## 2、检查是否有新增:log_id
diff ${ID_New} ${ID_Old}
status=`echo $?` 

>${Ct_SNew}
## 3、如果有新增:log_id,表示后台日志有新内容
if [ ${status} -ne 0 ]
then
   
   ## ID_New 内容肯定要比 ID_Old内容多
   diff ${ID_New} ${ID_Old} > dif
     
   # 找到log_id对应的文件行号,去掉第一行无用行
   sed -n '/</=' dif > dif_num

   cat dif_num | while read line
   do 
     
      #根据行号,找到 log_id 的日志内容
      Dif_ID=`sed -n "$line"p dif |awk '{print $2}'` 
  
      echo "Dif_ID:  $Dif_ID"
      #3.1 根据 log_id,查新增内容
      mysql -u{数据库登录用户} -p'{数据库登录密码}' -h{数据库登录地址} -e "use {数据库名}; SELECT users.username, log.log_time, log.ip, log.title, log.content from {日志表} log, {用户表} users where log.user_id=users.user_id and log_id='$Dif_ID' and log_time >= '$begin_time' AND log_time <= '$end_time';" >> ${Ct_SNew}
   done 

   #3.2 去掉无用行
   cat ${Ct_SNew} |grep -v "content" > ${Ct_New}
   
   #3.3 查新增内容
   cat ${Ct_New} |while read line
   do
      user=`echo $line | awk '{print $1}'`
      time=`echo $line | awk '{print $3}'`
      title=`echo $line | awk '{print $5}'`
    
      if [ "$title" == "修改用户" ]; then
        content=`echo $line | awk -F'username=' '{print $2}'`
      else
        content=`echo $line | awk -F'title=' '{print $2}'`
      fi

      #3.3.1 如果日志内容为空,表示登录
      # 登录失败会显示密码,也要过滤掉
      if [ ! -n "$content"  ] || [ "$title" == "登录失败" ]; then
         content1=""
      elif [ "$title" == "修改用户" ]; then
         content1=`echo $content`
      else 
         content1="《$content》"
      fi
      #去除标题内容里面的空格
      content2=`echo ${content1// /}`

      echo "content2= $content2"

      #content2=`echo ${content1} |sed 's/ /,/g'`
      
      #3.3.2 钉钉通知
      SendMessageToDingdingljy ${token1} ${user} ${time} ${title} ${content2} 

      SendMessageToDingdingljy ${token2} ${user} ${time} ${title} ${content2} 
   done   

   #3.4 替换最新log_id文件,防止重复发钉钉
   cp ${ID_New} ${ID_Old}
fi

 效果图:

  

 

 

 

 心累,明天再说说细节

 

标签:log,通知,ID,content,获取,日志,id,Dir
From: https://www.cnblogs.com/windysai/p/16746445.html

相关文章

  • 获取JAVA[WEB]项目相关路径的几种方法 _
    在jsp和class文件中调用的相对路径不同。在jsp里,根目录是WebRoot;在class文件中,根目录是WebRoot/WEB-INF/classes;当然你也可以用System.getProperty("user.dir")获取你工程......
  • 日志文件定期压缩移动删除
    压缩移动删除备份文件:1.压缩日志文件 tar-zcvfcatalina.2022-09-29.log2移动备份文件到home/baklogs3.删除原有日志文件catalina.2022-09-29.log#!/bin/bash#日......
  • 日志下载器
    1、因为某些原因,只能看一段时间的日志,所以我就自己搞了个日志下载器,便于开发同学日常查询日志。2、这个工具麻烦的地方就是在表格中嵌入checkbox、在子线程中通过信号改变......
  • Andorid 11获取外部存储权限方法
    privatevoidrequestmanageexternalstorage_Permission(){if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.R){//先判断有没有权限......
  • 如何获取Citrix授权?
    我们聊到关于CitrixSD-WAN的问题,那当我们拿到一台SD-WAN设备时,第一步要做的就是激活设备,那就跟着小壳一起来看看如何获取Citrix设备的授权。一、账号注册 首先登录htt......
  • Linux /Centos 7 服务器定时将备份信息、日志发送到邮箱
    公司业务需要将数据库每日备份,然后在保存到本地硬盘,且未搭建文件服务器。于是换一种思路解决,利用Linux发送邮件并添加备份文件作为附件信息,发送到指定的邮箱,然后定时执行脚......
  • 获取图片并预览
    环境介绍:代码工具:VisualStudio2022开发框架:.netformwork4.7.2开发须知当前我所了解的有.netcore以及.netformwork两种框架.netformwork:这个是微软专用......
  • k8s+log-pilot日志收集
    github地址:https://github.com/AliyunContainerService/log-pilot介绍log-pilot是一个很棒的docker日志工具。可以从dockerlog-pilot主机收集日志并将它们发送到您的......
  • 关于手机端H5通知已读未读的一个简单demo
    情景:系统发通知给每一个员工,每个员工有一个系统系统,点击提示,通知列表有已读和未读主要通过redis来实现,大致思路:将通知和员工绑定作为key,如果员工点进链接证明已读则将key......
  • Js获取当前日期 和 50天前日期 (字符串补全)
    1.获取当前时间// console.log(new Date().getTime());获取当前时间的毫秒数// console.log(new Date());获取当前的时间letdate=newDate();letye......