#!/usr/bin/env Python
#-*-Coding:utf-8-*-
Import OS
Import Sys
Import datetime
Import Urllib2
Import JSON
Import warnings
Import MySQLdb
Warnings.filterwarnings ("Ignore")
_url = "http://172.16.8.71/api/query/get/"
Server_resultcolumn = ["Svrassetid", "Svroperator", "Svrbakoperator", "Serverlanip", "INNERNETIDC", "OUTERNETIDC", " Bsipath ", ' ServerBusi2 ', ' eqsname ')
Class Cmdbhelpererror (Exception): Pass
Class Cmdbhelper (object):
def __init__ (self, Qdata=none):
Self.qdata = {}
Self.data_field = []
Self.data_field_map = {}
Self.data_field_map1 = {}
Self.total_count = 0
Self.result = []
self.qdata["params"] = {}
self.qdata["params" ["content"] = {}
self.qdata["params" ["Content"] ["schemeid"] = ""
self.qdata["params" ["Content"] ["type"] = "Json"
self.qdata["params" ["Content"] ["version"] = "1.0"
self.qdata["params" ["Content"] ["dataformat"] = "dict"
self.qdata["params" ["Content"] ["requestinfo"] = {}
self.qdata["params" ["Content"] ["resultcolumn"] = {}
self.qdata["params" ["Content"] ["paginginfo"] = {}
self.qdata["params" ["Content"] ["by"] = ""
self.qdata["params" ["Content"] ["conditionlogical"] = ""
self.qdata["params" ["Content"] ["searchcondition"] = {}
self.qdata["params" ["Content"] ["Requestinfo"] ["systemid"] = "201206250"
self.qdata["params" ["Content"] ["Requestinfo"] ["sceneid"] = "1"
self.qdata["params" ["Content"] ["Requestinfo"] ["requestmodule"] = ""
self.qdata["params" ["Content"] ["Requestinfo"] ["operator"] = ""
self.qdata["params" ["Content"] ["paginginfo"] = {"StartIndex": "0", "returntotalrows": "0"}
def add_schemeid (self, schemeid= "Server"):
If SchemeId not in ["Server", "Netdevice", "Ipresource", "IDC", "Modify_timestamp"]:
Raise Cmdbhelpererror ("Add_schemeid parameter Error")
self.qdata["params" ["Content"] ["schemeid"] = SchemeId
def change_requestinfo (self, requestinfo):
If Type (requestinfo) is not dict:
Raise Cmdbhelpererror ("Change_requestinfo parameter Error")
Elif not requestinfo:
Raise Cmdbhelpererror ("Change_requestinfo parameter is empty")
For k in Requestinfo.keys ():
self.qdata["params" ["Content"] ["requestinfo"][k] = Requestinfo[k]
def add_resultcolumn (self, resultcolumn):
If Type (resultcolumn) is not list:
Raise Cmdbhelpererror ("Add_resultcolumn parameter Error")
Elif not resultcolumn:
Raise Cmdbhelpererror ("Add_resultcolumn parameter is empty")
For I in Resultcolumn:
self.qdata["params" ["Content"] ["resultcolumn"][i] = ""
def change_paginginfo (self, paginginfo):
If Type (paginginfo) is not dict or \
Set (Paginginfo.keys ())! = Set (["StartIndex", "PageSize", "Returntotalrows"]):
Raise Cmdbhelpererror ("Change_paginginfo parameter Error")
Elif not paginginfo:
Raise Cmdbhelpererror ("Change_paginginfo parameter is empty")
For k in Paginginfo.keys ():
self.qdata["params" ["Content"] ["paginginfo"][k] = Paginginfo[k]
def Add_orderby (self, by-and-by):
If type (by) is not STR or \
By-self.qdata["params" ["Content"] ["Resultcolumn"].keys ():
Raise Cmdbhelpererror ("Add_orderby parameter Error")
self.qdata["params" ["Content"] ["by"] = by
def add_conditionlogical (self, conditionlogical):
If Type (conditionlogical) is not str:
Raise Cmdbhelpererror ("add_conditionlogical parameter Error")
self.qdata["params" ["Content"] ["conditionlogical"] = conditionlogical
def add_searchcondition (self, searchcondition):
If Type (searchcondition) is not dict:
Raise Cmdbhelpererror ("add_searchcondition parameter Error")
For k in Searchcondition.keys ():
self.qdata["params" ["Content"] ["searchcondition"][k] = Searchcondition[k]
def do_query (self):
Try
FD = Urllib2.urlopen (_url, Json.dumps (Self.qdata), 60)
Content = Json.load (FD)
Try
If content["DataSet" ["Header"] ["ReturnCode"]! = 0:
Raise Cmdbhelpererror ("CMDB return error, ErrorCode:%s, errorinfo:%s"%
(content["DataSet" ["Header"] ["ErrorCode"],
content["DataSet" ["Header"] ["errorinfo"]))
Self.total_count = content["DataSet" ["Header"] ["totalrows"]
Except Keyerror, E:
Raise Cmdbhelper (U "do_query error,%s"% e)
Self.data_field = [i["id"] for i in content["DataSet" ["FieldDef"]]
For i in content["DataSet" ["FieldDef"]:
self.data_field_map[i["id"]] = i["Name"]
self.data_field_map1[i["id"] = (i["name"], i["DataType"])
Self.result = content["DataSet" ["Data"]
Self.total_count = Len (content["DataSet" ["Data"])
Except Urllib2. Httperror, E:
Raise Cmdbhelpererror (U "urllib2. Httperror,%s "% e)
Except Urllib2. Urlerror, E:
Raise Cmdbhelpererror (U "urllib2. Urlerror,%s "% e)
Except Exception, E:
Raise Cmdbhelpererror (U "unkown Error,%s"% e)
def show_result (self):
If Self.result is []:
Raise Cmdbhelpererror ("There is no result")
For I in Enumerate (Self.result):
return i[1]
def asset_storage (self,line):
Try
Conn=mysqldb.connect (host= ' localhost ', user= "root", passwd= "", db= "Assetdata", charset= ' UTF8 ')
Cur=conn.cursor ()
Dt= Datetime.datetime.now (). Strftime ("%y-%m-%d")
Colstr= "
Columnstyle= ' VARCHAR (300) '
Tablename= "T_asset_info"
Dic=line
dic[' Update_time ']=dt
For key in Dic.keys ():
colstr=colstr+ ' +key+columnstyle+ ', '
Try
Cur.execute ("CREATE TABLE IF not EXISTS%s (%s)"% (Tablename,colstr[:-1])
Except Mysqldb.error,e:
Print "Mysql Error%d:%s"% (E.args[0], e.args[1])
For I in Enumerate (Self.result):
Rowstr= "
DATA=I[1]
# data[' Update_time ']=dt
data[' Update_time ']= "2016-10-25"
For key in Data.keys ():
Rowstr= (rowstr+ ' "%s" ' + ', ')% (Data[key])
Cur.execute ("Select * from%s"% (TableName))
Cur.execute ("INSERT into%s VALUES (%s)"% (Tablename,rowstr[:-1]))
Conn.commit ()
Except Mysqldb.error,e:
Print "Mysql Error%d:%s"% (E.args[0], e.args[1])
Finally
Cur.close ()
Conn.close ()
def asset_data (self):
Try
Now_data=[]
Yes_data=[]
New_add=[]
Old_del=[]
Now_time=time.strftime ('%y-%m-%d ')
Now_times = Datetime.datetime.now ()
Yes_times = Now_times + Datetime.timedelta (days=-1)
Yes_time = Yes_times.strftime ('%y-%m-%d ')
Sql= "Select Svrassetid from T_asset_info where update_time=\"%s\ ""%now_time
Sql_old= "Select Svrassetid from T_asset_info where update_time=\"%s\ ""%yes_time
Conn=mysqldb.connect (host= ' localhost ', user= "root", passwd= "", db= "Assetdata", charset= ' UTF8 ')
Cur=conn.cursor ()
Cur.execute (SQL)
Result=cur.fetchall ()
Cur.execute (Sql_old)
Result_old=cur.fetchall ()
For results in Result:
Results_new = ". Join (Results)
Now_data.append (results_new)
For Results_old in Result_old:
Result_old_new= '. Join (Results_old)
Yes_data.append (result_old_new)
New_num=len (Now_data)
Old_num=len (Yes_data)
For new_id in range (0,new_num):
If now_data[new_id] not in Yes_data:
New_add.append (now_data[new_id])
For old_id in range (0,old_num):
If yes_data[old_id] not in Now_data:
Old_del.append (yes_data[old_id])
Return New_add,old_del
Except Mysqldb.error,e:
Print "Mysql Error%d:%s"% (E.args[0], e.args[1])
Finally
Cur.close ()
Conn.close ()
def asset_table (Self,new,old):
Try
Conn=mysqldb.connect (host= ' localhost ', user= "root", passwd= "", db= "Assetdata", charset= ' UTF8 ')
Cur=conn.cursor ()
If Len (new):
For Insert_data in NEW:
Sql_add= "SELECT * from T_asset_info where svrassetid=\"%s\ ""%insert_data
Cur.execute (Sql_add)
Res_n=cur.fetchall ()
Cur.execute ("INSERT into t_asset_table VALUES (\"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ")"% (res_n[0][0],res_n[0][1 ],RES_N[0][2],RES_N[0][3],RES_N[0][4],+1))
Conn.commit ()
If Len (old):
For Insert_data in old:
Sql_del= "SELECT * from T_asset_info where svrassetid=\"%s\ ""%insert_data
Cur.execute (Sql_del)
Res_o=cur.fetchall ()
Cur.execute ("INSERT into t_asset_table VALUES (\"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ", \"%s\ ")"% (res_o[0][0],res_o[0][1 ],RES_O[0][2],RES_O[0][3],RES_O[0][4],-1))
Conn.commit ()
Except Mysqldb.error,e:
Print "Mysql Error%d:%s"% (E.args[0], e.args[1])
Finally
Cur.close ()
Conn.close ()
def main (schemeid= "Server"):
Q = Cmdbhelper ()
Q.add_schemeid (SchemeId)
Q.add_resultcolumn (eval ("%s_resultcolumn"% Schemeid.lower ()))
Q.add_searchcondition ({"ServerBusi2": ["TMP", "TSC", "GSLB", "CMDB", "Ticket", "internal public service"]})
Q.do_query ()
Line=q.show_result ()
Q.asset_storage (line)
New_result,old_result=q.asset_data ()
Q.asset_table (New_result,old_result)
if __name__ = = "__main__":
Print str (Datetime.datetime.now ()). Center (79, "-")
Main ()
Print str (Datetime.datetime.now ()). Center (79, "-")
This article from "12758454" blog, declined reprint!
CMDB Data acquisition