#!/usr/bin/env python# -*-coding:utf-8-*-
import urllib
import urllib2
import json
import sys
import platform
import time
def auth(uid, username, password, api_url):
"""zabbix認證
:param uid:
:param username:
:param password:
:return:
"""dict_data = {}
dict_data['method'] = 'user.login' # 方法
dict_data['id'] = uid # 使用者id
dict_data['jsonrpc'] = "2.0" # api版本
dict_data['params'] = # 使用者賬號密碼
jdata = json.dumps(dict_data) # 格式化json資料
content = post_data(jdata, api_url) # post json到介面
return content # 返回資訊
def post_data(jdata, url):
"""post方法
:param jdata:
:param url:
:return:
"""response = urllib2.urlopen(req)
# content = response.read()
content = json.load(response)
return content
def create_maintenance(name, hostid, active_since, active_till, period, auth_code, api_url):
"""create maintenance
:return:
"""dict_data = {}
dict_data['method'] = 'maintenance.create' # 方法
dict_data['id'] = uid # 使用者id
dict_data['jsonrpc'] = "2.0" # api版本
dict_data['auth'] = auth_code # api版本
dict_data['description'] = "update" + hostid # api版本
# host
hostids = [hostid]
# timeperiods
timeperiods =
dict_data['params'] = # 使用者賬號密碼
jdata = json.dumps(dict_data) # 格式化json資料
content = post_data(jdata, api_url) # post json到介面
print content
return content # 返回資訊
def get_hostid(hostname, auth_code, uid, api_url):
"""use hostname get hostid
:param hostname:
:param auth:
:param uid:
:return:
"""dict_data = {}
dict_data['method'] = 'host.getobjects' # 方法
dict_data['id'] = uid # 使用者id
dict_data['jsonrpc'] = "2.0" # api版本
dict_data['params'] = # 主機名
dict_data['auth'] = auth_code # auth串
jdata = json.dumps(dict_data) # 格式化json資料
content = post_data(jdata, api_url) # post json到介面
print content
return content # 返回資訊
def logout(uid, auth_code, api_url):
"""退出
:param uid:
:param auth_code:
:return:
"""dict_data = {}
dict_data['method'] = 'user.logout' # 方法
dict_data['id'] = uid # 使用者id
dict_data['jsonrpc'] = "2.0" # api版本
dict_data['params'] =
dict_data['auth'] = auth_code # auth串
jdata = json.dumps(dict_data) # 格式化json資料
content = post_data(jdata, api_url) # post json到介面
return content # 返回資訊
if __name__ == '__main__':
# user info
uid = 1 # 使用者id
username = 'admin'
password = '123456'
api_url = ""
res = auth(1, username, password, api_url) # 認證
if res['result']:
auth_code = res['result'] # 認證串
hostname = platform.node() # 主機名
res = get_hostid(hostname, auth_code, uid, api_url)
if res['result']:
period = 600 # 維護時長
active_since = int(time.time()) # 開始時間
active_till = int(time.time()) + period # 結束時間
hostid = res['result'][0]['hostid'] # 主機
res = create_maintenance('automaintenance_' + hostname + '_' + str(active_since), hostid, active_since, active_till, period,
auth_code, api_url) # 建立維護
logout(uid, auth_code, api_url) # 退出登入
print res
else:
pass
備註:以上指令碼適用於zabbix2.4及以下版本
需要修改uid、username、password、api_url以及res中的auth函式的uid值,通過修改period的值來修改維護時長。
該指令碼通過platform模組獲取到agent的主機名,確保server端的主機名與客戶端一致,且存在,否則設定不成功。
設定完成後可在configuration->maintenance頁面中檢視設定的維護模板。
可以通過在configuration->hosts頁面中檢視是否生效。
面向可維護的設計模式
可維護性是程式的乙個重要指標,良好的可維護性可以幫助程式更快,更容易的改變以適應新的需求,在面向可維護性的程式設計過程中,傳統的模式顯然不那麼實用,這裡總結了幾個更好的設計模式 1 模式 當某個物件比較重要,不希望被直接訪問到時,就可以採用這種模式,這種模式的關鍵在於使用乙個 類繼承與實際被訪問的類...
設定網絡卡混雜模式
關鍵api ioctlsocket 設定雜收模式 巨集 define sio rcvall 0x80000000 0x18000000 1 ip頭 typedef struct ipheader ipheader tcp頭 typedef struct tcpheader tcpheader 流程 ...
Activity啟動模式設定
activity啟動模式設定 activity的四種啟動模式 1.standard 預設啟動模式,每次啟用activity時都會建立activity,並放入任務棧中。2.singletop 如果在任務的棧頂正好存在該activity的例項,就重用該例項,否者就會建立新的例項並放入棧頂 即使棧中已經存...