亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

微信運維交互機器人的示例代碼

2019-11-19 12:32:13
字體:
來源:轉載
供稿:網友

前言

今年五月份參加Oracle開發者大會,在會議上看到智能AI在運維方面的應用場景;講師現場展現了一款能夠結合上下文對話的智能AI,通過聊天方式完成運維工作。

會議后對該款智能AI機器人念念不忘,由于人工智能AI學習成本較高,尋思著是否能夠寫一套低配版運維交互機器人;

思考

初期期望該機器人能夠:

  • 通過手機能夠處理簡單的故障
  • 不智能但至少配置能夠靈活變更

有了具體的目標, 再考慮具體實現方案, 主要思考幾個點:

應用載體

我期望這個載體是一款常用的手機APP;現有環境中微信企業號適合干這個事情, 且官網有各種API文檔, 實施起來不是個什么巨大挑戰.

安全性

涉及到運維平臺,控制了運維平臺就相當于控制了所有服務器;所以關系到運維平臺的安全問題不可小窺,得確保在交互過程中的安全,在交互過程中需要加密,對不信任服務器進行策略管控.

靈活性

可以通過配置文件方式進行配置,后續隨著功能模塊增加可以隨時進行更改,考慮到使用配置文件方式可能太過單一,花里胡哨的功能可能無法滿足實現,盡量考慮又能花里胡哨,又能靈活管理配置的方案.

對話上下文

一般而言,通訊都需要一個長連接保證通信期間雙方可以收發數據包; 考慮到一個對話就得專門起一個線程進行通信,這樣不但增加開發難度,且更消耗資源, 權衡利弊后,對于上下文管理這一部分盡量選用非實時性方案去做.

架構

列出思考的幾個關鍵點后,對整體的設計進行深入思考,幾經思考后:

采用微信企業號作為應用載體

有關于企業號的開發傳送門.

安全加固

接口平臺只放通騰訊服務器IP訪問.運維平臺開放接口平臺白名單訪問,并且采用Python itsdangerous生成安全令牌進行通信交互.

程序設計思想

采用樹結構設計模式,每個分叉為一個功能.這樣就不必擔心無法完成花里胡哨的操作,又能夠靈活變更.

持久化存儲接收信息

對每個用戶發送的信息進行存儲,并作出快速響應.Redis對于這個場景非常適用,既能夠存儲信息又十分高效.

架構圖看起來大概是這樣:

實現

接收企業號信息API代碼片段展示

# 引用企業微信JDKfrom WXcrypt.WXBizMsgCrypt import WXBizMsgCryptdef work_weixin_api(request): # 獲取微信Post參數 msg_signature = request.GET.get('msg_signature', '') timestamp = request.GET.get('timestamp', '') nonce = request.GET.get('nonce', '') echostr = request.GET.get('echostr', '') # 構造微信信息解析方法 wxcpt = WXBizMsgCrypt(WXTOKEN, WXENCODINGAESKEY, WXCROPID) if request.method == 'POST':  eagle_branch = request.POST.get('eagle_branch', 'master')  if eagle_branch == "master":   request_data = request.body   # 解析接收到的文本   ret, msg = wxcpt.DecryptMsg(request_data, msg_signature, timestamp,          nonce)   request_xml = ET.fromstring(msg)   # 獲取信息內容   content = request_xml.find("Content").text   # 獲取信息類型   msg_type = request_xml.find("MsgType").text   # 獲取發送人   from_user = request_xml.find("FromUserName").text  else:   content = request.POST.get('content', '')   from_user = request.POST.get('from_user', '')

安全令牌生成

# 加密def enc_dict(d): # 加密 s = URLSafeSerializer('1234') st = s.dumps(d) # 加密后再生成基于時間戳的令牌 t = TimestampSigner('4567') ts = t.sign(st) return ts

功能樹設計代碼片段展示

先定義一個功能樹基類

# 菜單功能的基類class Function: def __init__(self, data):  self._data = data  self._functions = [] # 傳入的方法的描述 def __str__(self):  return str(self._data()) # 返回當前對象類型 def f_type(self):  return self._data.f_type # 返回當前對象 def getData(self):  return self._data # 返回所有子菜單 def getFunctions(self):  return self._functions # 新增子菜單 def add(self, function):  self._functions.append(function) # 遞歸搜索 def go(self, num):  for _, i in enumerate(self._functions):   if int(num) == _ :    return i  return None

由于是在手機上操作, 那么交互內容盡可能簡單,所以采用全數字交互方式.
在樹結構設計模式下,所有操作都是在遞歸搜尋,對于其他特殊的輸入,例如端口 確認驗證碼之類的無法實現.

在這里需要有小小的改動

 # 新增一個類型屬性 def f_type(self):  return self._data.f_type # 遞歸搜索 def go(self, num):  for _, i in enumerate(self._functions):   f_type = i._data().f_type   # 如果類型是默認且存在列表中,或動態生成類型的,直接返回   if f_type == "default" and int(num) == _ or f_type == "dynamic":    return i  return None

接著,編寫一個功能樹的類

class Menu: def __init__(self):  self._head = Function(FunctionNodeBase())  self.input_text = None # 鏈接 def linkToHead(self, function):  self._head.add(function) # 搜索 def search(self, text):  cur = self._head  for i in text.split('-'):   if cur.go(i) == None:    return None   else:    self.input_text = i    cur = cur.go(i)  return cur

葉子的主體都有了,下面來創建樹頂

展示: 基礎功能葉 動態功能葉 靜態功能葉

# 空的功能Nodeclass FunctionNodeBase: __metaclass__ = ABCMeta def __init__(self,     user=None,     f_type="default",     input_text=None,     sub_text=None):  self.user = user  self.sub_text = sub_text  self.input_text = input_text  self.f_type = f_type  self.f_mark = [] # 菜單通過run方法執行與生成文本 @abstractmethod def run(self):  return self.__str__() # 描述 @abstractmethod def __str__(self):  return "菜單樹頂層"# 動態生成class SelectDeploymentTop(FunctionNodeBase): # 動態生成的菜單需要聲明f_type def __init__(self):  super().__init__()  self.f_type = "dynamic" def run(self):  text       = "請選擇事業部/n/n"  deployment_list = [i for i in FunctionList.keys()]  for _, i in enumerate(deployment_list):   self.f_mark.append(_)   text += "%s %s/n" % (_, i)  return text # 微信顯示的文本信息 def __str__(self):  return "選擇事業部"# 靜態class MySQLFunctionTop(FunctionNodeBase): def __init__(self):  super().__init__() def run(self):  text = "您選擇的是%s,請選擇您想要操作:/n" % str(self.__str__())  text += "%s/n" % self.sub_text  return text def __str__(self):  return "MySQL操作"

效果圖,第一層功能展示

將需要的功能逐一寫好后需要進行注冊

def api(tid,user): # 實例化 menu    = Menu() top     = Function(SelectDeploymentTop) function_top = Function(FunctionTop) mysql_top  = Function(MySQLFunctionTop) # 鏈接 top.add(function_top function_top.add(mysql_top) # 關聯菜單樹 menu.linkToHead(top) # 遞歸搜索 function = menu.search(tid)

Redis存儲對話代碼片段

class redis_db: def __init__(self):  # 按符號隔開  self.mark = '-'  self.redis_db = redis.StrictRedis(   host = host, port=6379, db=1, decode_responses=True) # 默認回話過期600秒,每次存儲 '-'隔開 def add(self,key,text,Timeout=600):  if key not in self.keys():   self.redis_db.set(key,'',ex=Timeout)  if self.get(key):   self.redis_db.append(key,self.mark)  self.redis_db.append(key,text)

同理,返回上層就刪除一格; 退出即刪除該KEY的值.

成果

下圖為:通過交互機器人連接k8s增加POD數的應用場景

后記

該系統已經在平臺上穩定運行大半年, 上線后使運維人員能夠更高效快速解決日常中遇到的一些故障.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频在线播放| 亚洲xxxx妇黄裸体| 日本精品在线视频| 亚洲电影在线观看| 性色av一区二区三区红粉影视| 亚洲一区av在线播放| 国产激情久久久久| 97视频在线观看亚洲| 欧美一级电影免费在线观看| 韩国福利视频一区| 亚洲人成电影网站色…| 成人午夜高潮视频| 成人黄色免费在线观看| 欧美成人h版在线观看| 97精品久久久| 精品久久香蕉国产线看观看亚洲| 国产xxx69麻豆国语对白| 国产成+人+综合+亚洲欧洲| 最近日韩中文字幕中文| 亚洲福利视频专区| 91大神福利视频在线| 亚洲人成毛片在线播放| 亚洲人成在线免费观看| 亚洲一区二区久久久久久久| 九九综合九九综合| 欧美日韩中文字幕综合视频| 国产视频观看一区| 国产91色在线| 日韩av影视在线| 国产精品吊钟奶在线| www.精品av.com| 午夜免费久久久久| 黄色成人在线免费| 午夜精品久久久久久久男人的天堂| 日韩精品亚洲精品| 久久视频在线播放| 亚洲天堂av女优| 久久久亚洲欧洲日产国码aⅴ| 亚洲欧洲偷拍精品| 日本中文字幕久久看| 国内成人精品一区| 国产一区二区动漫| 日韩精品在线第一页| 91亚洲va在线va天堂va国| 色综合久久久久久中文网| 97在线精品视频| 欧美性生交大片免费| 精品国产成人av| 亚洲欧美日韩一区二区在线| 日韩国产在线播放| 激情懂色av一区av二区av| 精品久久久精品| 91精品久久久久久久久久另类| 日韩视频免费中文字幕| 久久成人国产精品| 精品久久香蕉国产线看观看gif| 久久久国产精品免费| 国内久久久精品| 亚洲男人天堂2024| 伊人久久久久久久久久久久久| 91精品国产一区| 亚洲男人天堂手机在线| 亚洲另类欧美自拍| 国产午夜精品美女视频明星a级| 久久久久久久久久久免费精品| 国产欧美在线看| 日韩中文在线观看| 欧美老女人性生活| 欧美另类第一页| 不卡av在线网站| 中文字幕综合在线| 久热精品视频在线观看| 最近2019年日本中文免费字幕| 亚洲激情在线观看视频免费| 成人激情视频在线观看| 欧美在线观看一区二区三区| 91日韩在线播放| 日韩有码在线观看| 亚洲精品欧美日韩专区| 国产亚洲人成a一在线v站| 综合国产在线观看| 欧美日韩免费在线观看| 亚洲综合日韩中文字幕v在线| 青青久久av北条麻妃海外网| 亚洲天堂免费视频| 伊人久久久久久久久久久久久| 九九久久国产精品| 亚洲精品免费在线视频| 国内精品免费午夜毛片| 国产日本欧美一区二区三区| 中文字幕久久久av一区| 亚洲福利视频专区| 欧美日韩国产va另类| 国产一区二区三区在线免费观看| 欧美激情手机在线视频| 精品久久中文字幕| 91青草视频久久| 日韩专区在线观看| 久久久久久高潮国产精品视| 亚洲在线免费看| 国产精品免费久久久| 一区二区三区四区精品| 91久久精品国产91性色| 久久久精品亚洲| 曰本色欧美视频在线| 伊人男人综合视频网| 日本19禁啪啪免费观看www| 久久久av一区| 久久亚洲欧美日韩精品专区| 成人xxxxx| 亚洲欧美中文日韩在线v日本| 日韩激情av在线播放| 国产精品久久久久久亚洲影视| 日韩av在线免费| 清纯唯美日韩制服另类| 国产精品一区二区三区久久| 欧美大秀在线观看| 欧美性猛交xxxx黑人| 国产亚洲精品高潮| 亚洲国产天堂久久国产91| 久久亚洲国产精品成人av秋霞| 亚洲男人的天堂在线播放| 国产精品网红福利| 在线观看欧美日韩国产| 午夜精品久久久久久久99热浪潮| 国产成人精品av在线| 黑人巨大精品欧美一区二区免费| 日韩av大片在线| 精品亚洲国产成av人片传媒| 91网在线免费观看| 青青a在线精品免费观看| 欧美乱大交xxxxx| 中文字幕久久久av一区| 欧洲精品毛片网站| 欧洲成人免费视频| 欧美激情视频在线| 国产精品成人在线| 成人激情视频网| 日韩在线中文视频| 亚洲成人精品久久| 最新69国产成人精品视频免费| 亚洲欧美激情四射在线日| 色香阁99久久精品久久久| 久久久久久免费精品| 一本大道亚洲视频| 国产精品夜色7777狼人| 日韩欧美aⅴ综合网站发布| 日产精品99久久久久久| 久久久久久久国产| 日本老师69xxx| 亚洲精品久久久久久久久久久| 日韩精品在线视频| 18一19gay欧美视频网站| 亚洲丝袜一区在线| 日韩电影中文字幕在线| 九九热视频这里只有精品| 欧美日韩国产精品一区| 欧美在线视频一区二区| 欧美精品久久久久a| 日本精品免费一区二区三区| 4444欧美成人kkkk| 一本一本久久a久久精品牛牛影视| 欧美日韩视频免费播放| 亚洲精品综合久久中文字幕|