django消息实时推送,django消息通知

  django消息实时推送,django消息通知

  总体思路:

  1、自定义框架命令行功能(参考:https://blog . csdn . net/Xu Jin 0/article/details/88056620)

  2、通过djaongo命令行,启动监听格里特事件流服务,根据相应类型提取字段,入库

  1、自定义框架命令行从姜戈.核心.管理导入基础命令,命令错误

  从订阅. gerrit.Factory导入CreatePatchSetFactory、ChangeAbandoneFactory、ChangeMergeFactory、ChangeRestoreFactory、TopicChangeFactory

  类命令(BaseCommand):

  帮助=订阅格里特流-事件:

  定义add_arguments(自身,解析器):

  parser.add_argument(name ,help=要监听哪个事件流\ n所有:全部\ n批集-已创建:创建补丁集时\ n更改-合并:合入补丁集时\ n更改-已放弃:废弃补丁集时\ n更改-已还原:恢复补丁集时\ n主题-已更改:主题更改时)

  # parser.add_argument(-s ,- subscribe ,help=可选参数,-s是简写,-订阅是全拼)

  定义句柄(self,*args,**options):

  # 1 .获取参数

  g_event=options[name]

  support _ events=[修补程序集-已创建,更改-合并,更改-放弃,更改-恢复,主题-更改]

  # 2 .检查参数是否受支持

  如果g _事件不在支持事件中:

  引发命令错误(参数错误,支持为:% s“%支持事件”

  if g_event==all :

  CP factory=CreatePatchSetFactory()

  cpfactory.get_stream_event()

  cabfactory=ChangeAbandoneFactory()

  cabfactory.get_stream_event()

  cmfactory=ChangeMergeFactory()

  cmfactory.get_stream_event()

  crfactory=ChangeRestoreFactory()

  crfactory.get_stream_event()

  tpfactory=TopicChangeFactory()

  tpfactory.get_stream_event()

  elif g_event==patchset-created :

  CP factory=CreatePatchSetFactory()

  cpfactory.get_stream_event()

  elif g_event==change-merged :

  cmfactory=ChangeMergeFactory()

  cmfactory.get_stream_event()

  elif g_event==更改-放弃:

  cabfactory=ChangeAbandoneFactory()

  cabfactory.get_stream_event()

  elif g_event==change-restored :

  crfactory=ChangeRestoreFactory()

  crfactory.get_stream_event()

  否则:

  tpfactory=TopicChangeFactory()

  tpfactory.get_stream_event()2、处理各个类型事件流数据逻辑从cmback.settings导入格里特主机名、GERRIT URL、GERRIT端口、G用户名、G密码

  从格里特导入GerritClient

  从cmapp.models导入饭桶

  从cmapp.serializers导入GitSerializer

  从字母表导入抽象方法

  从django.db导入关闭旧连接

  导入系统

  导入简单讲解及作业需求

  导入操作系统

  导入日志记录

  导入数据

  导入日期时间

  进口是

  类GerritFactory(对象):

  订阅格里特流事件,保存到本地数据库实时显示

  https://Gerrit-文档存储谷歌APIcom/Documentation/34 .1/cmd-流-事件超文本标记语言

  https://Gerrit-文档存储谷歌APIcom/Documentation/34 .1/JSON超文本标记语言

  使用:

  "变更-放弃"

  更改-合并

  更改-恢复

  主题-已更改

  补丁程序集-已创建

  未使用:

  受分配人-已更改

  标签-已更改

  参考-更新

  审阅者-已添加

  审阅者-已删除

  注释-已添加

  项目-已创建

  更改-删除

  __元类__=ABCMeta

  def __init__(self):

  self.hostname=GERRIT_HOSTNAME

  self.gerriturl=GERRIT_URL

  self.port=GERRIT_PORT

  self.username=G _用户名

  self.passwd=G_PASSWORD

  self.client=paramiko .SSHClient()

  自我客户set _ missing _ host _ key _ policy(paramiko .AutoAddPolicy())

  自我logger=日志记录获取记录器(“订阅”)

  @抽象方法

  def获取流事件(自身):

  及格

  def connectGerrit(self):

  尝试:

  files=os.listdir( ./subscribe/gerrit/)

  对于文件中的文件:

  if file.endswith(rsa ):

  自我客户连接(主机名=自身主机名,端口=自我.端口,用户名=自我.用户名,pkey=paramiko .RSAKey(文件名=/subscribe/Gerrit/% s“% file”)

  自我渠道=自己客户get _ transport().open_session(timeout=5)

  self.logger.info(连接到Gerrit ok’)

  破裂

  例外情况为e:

  self.logger.error(连接格里特失败,% s“% e”)

  系统退出(1)

  定义获取问题(自身,数据):

  tmplist=re.findall(Issue:(.*)?,数据)

  如果len(tmplist)==1且len(tmplist[0]) 16:

  返回tmplist[0].拆分("")

  否则:

  返回tmplist

  def getChangeLines(self,changeid):

  g client=GerritClient(base _ URL=selfgerriturl,用户名=self.username,密码=self.passwd,ssl_verify=False)

  RES=g客户端变化获取(changeid).get _ revision( current )文件投票()

  change_line=0

  对于以表示留数表示的值:

  如果值get( path )==/COMMIT _ MSG :

  继续

  插入=值get( lines _ inserted )if值get( lines _ inserted )not other 0

  如果value.get(lines_deleted )不是没有其他0,则删除=值get( lines _ deleted )

  change_line=max(插入,删除)

  返回更改_行

  类CreatePatchSetFactory(GerritFactory):

  def获取流事件(自身):

  # 1 .联系

  self.connectGerrit()

  # 2 .倾听

  尝试:

  自我渠道exec _ command( Gerrit流-事件-补丁程序集-已创建)

  虽然正确:

  如果自我渠道退出状态就绪():

  破裂

  流数据=自身渠道收入(1024000)

  data=json.loads(streamdata)

  自我伐木工信息(修补程序集-已创建:\ n % s %数据

  changeid=data[change][id]

  numberid=data[ change ][ number ]

  new _ revision=data[修补程序集][修订版]

  repo=data[变更][项目]

  branch=data[ change ][ branch ]

  parent= if len(data[修补程序集][父项])==0 else data[修补程序集][父项][0]

  主题=数据[更改][主题]

  topic=data[change].获取(主题,无)

  状态=数据[更改][状态]

  commit _ message=data[更改][提交消息]

  问题列表=自身getissues(commit _ message)

  issue _ list=JSON转储(问题列表)

  作者=数据[更改][所有者][用户名]

  提交日期=日期时间日期时间从时间戳(数据[更改][创建不]).strftime(%Y-%m-%d %H:%M:%S )

  更新日期=日期时间日期时间从时间戳(数据[ eventCreatedOn ])开始.strftime(%Y-%m-%d %H:%M:%S )

  change _ line=selfgetchangelines(changeid)

  # 1 .检查号码编号是否存在?

  close_old_connections()

  numstatus=git对象filter(numberid=numberid).存在()

  如果数字状态:

  #更新

  up obj=git对象get(numberid=numberid)

  向上的物体新版本=新版本

  upobj.subject=主题

  upobj.update_date=更新日期

  向上的物体提交消息=提交消息

  upobj.status=状态

  upobj.issue_list=issue_list

  upobj.change_line=change_line

  upobj.save()

  自我伐木工信息(修补程序集-已创建-数据库:% s % s更新成功 %(numberid,changeid))

  否则:

  #创建

  new_data={

   changeid: changeid,

   numberid: numberid,

  新版本:新版本,

  回购:回购,

  分支:分支,

  父:父,

  主题:主题,

  主题:主题,

  旧主题: xxxxx

  x ,

  状态:状态,

  提交人:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: