1414from websdk .db_context import DBContext
1515import tornado .web
1616
17+
1718class DBHandler (BaseHandler ):
1819 def get (self , * args , ** kwargs ):
20+ nickname = self .get_current_nickname ()
1921 key = self .get_argument ('key' , default = None , strip = True )
2022 value = self .get_argument ('value' , default = None , strip = True )
2123 page_size = self .get_argument ('page' , default = 1 , strip = True )
@@ -45,28 +47,66 @@ def get(self, *args, **kwargs):
4547
4648 ### 监听搜索
4749 if key and key != 'tag_name' and not value :
48- count = session .query (DB ).filter (or_ (DB .db_code .like ('%{}%' .format (key )),
49- DB .db_host .like ('%{}%' .format (key )),
50- DB .db_user .like ('%{}%' .format (key )),
51- DB .db_pwd .like ('%{}%' .format (key )),
52- DB .proxy_host .like ('%{}%' .format (key )),
53- DB .db_type .like ('%{}%' .format (key )),
54- DB .db_version .like ('%{}%' .format (key )),
55- DB .db_mark .like ('%{}%' .format (key )),
56- DB .state .like ('%{}%' .format (key )),
57- DB .db_env .like ('%{}%' .format (key )))).count ()
58-
59- db_info = session .query (DB ).filter (or_ (DB .db_code .like ('%{}%' .format (key )),
60- DB .db_host .like ('%{}%' .format (key )),
61- DB .db_user .like ('%{}%' .format (key )),
62- DB .db_pwd .like ('%{}%' .format (key )),
63- DB .proxy_host .like ('%{}%' .format (key )),
64- DB .db_type .like ('%{}%' .format (key )),
65- DB .db_version .like ('%{}%' .format (key )),
66- DB .db_mark .like ('%{}%' .format (key )),
67- DB .state .like ('%{}%' .format (key )),
68- DB .db_env .like ('%{}%' .format (key )))).order_by (DB .id ).offset (
69- limit_start ).limit (int (limit ))
50+ # TODO 超管查所有
51+ if self .is_superuser :
52+
53+ count = session .query (DB ).filter (or_ (DB .db_code .like ('%{}%' .format (key )),
54+ DB .db_host .like ('%{}%' .format (key )),
55+ DB .db_user .like ('%{}%' .format (key )),
56+ DB .db_pwd .like ('%{}%' .format (key )),
57+ DB .proxy_host .like ('%{}%' .format (key )),
58+ DB .db_type .like ('%{}%' .format (key )),
59+ DB .db_version .like ('%{}%' .format (key )),
60+ DB .db_mark .like ('%{}%' .format (key )),
61+ DB .state .like ('%{}%' .format (key )),
62+ DB .db_env .like ('%{}%' .format (key )))).count ()
63+
64+ db_info = session .query (DB ).filter (or_ (DB .db_code .like ('%{}%' .format (key )),
65+ DB .db_host .like ('%{}%' .format (key )),
66+ DB .db_user .like ('%{}%' .format (key )),
67+ DB .db_pwd .like ('%{}%' .format (key )),
68+ DB .proxy_host .like ('%{}%' .format (key )),
69+ DB .db_type .like ('%{}%' .format (key )),
70+ DB .db_version .like ('%{}%' .format (key )),
71+ DB .db_mark .like ('%{}%' .format (key )),
72+ DB .state .like ('%{}%' .format (key )),
73+ DB .db_env .like ('%{}%' .format (key )))).order_by (DB .id ).offset (
74+ limit_start ).limit (int (limit ))
75+
76+ else :
77+ # TODO 普通用户只能看到有权限的
78+ db_id_list = []
79+ with DBContext ('r' ) as session :
80+ the_dbs = session .query (DBTag .db_id ).filter (DBTag .tag_id .in_ (
81+ session .query (Tag .id ).filter (or_ (Tag .users .like ('%{}%' .format (nickname ))))))
82+ for s in the_dbs :
83+ db_id_list .append (s [0 ])
84+ # 去重下列表,万一有重复的呢
85+ set_db_id_list = set (db_id_list )
86+ count = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).filter (
87+ or_ (DB .db_code .like ('%{}%' .format (key )),
88+ DB .db_host .like ('%{}%' .format (key )),
89+ DB .db_user .like ('%{}%' .format (key )),
90+ DB .db_pwd .like ('%{}%' .format (key )),
91+ DB .proxy_host .like ('%{}%' .format (key )),
92+ DB .db_type .like ('%{}%' .format (key )),
93+ DB .db_version .like ('%{}%' .format (key )),
94+ DB .db_mark .like ('%{}%' .format (key )),
95+ DB .state .like ('%{}%' .format (key )),
96+ DB .db_env .like ('%{}%' .format (key )))).count ()
97+
98+ db_info = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).filter (
99+ or_ (DB .db_code .like ('%{}%' .format (key )),
100+ DB .db_host .like ('%{}%' .format (key )),
101+ DB .db_user .like ('%{}%' .format (key )),
102+ DB .db_pwd .like ('%{}%' .format (key )),
103+ DB .proxy_host .like ('%{}%' .format (key )),
104+ DB .db_type .like ('%{}%' .format (key )),
105+ DB .db_version .like ('%{}%' .format (key )),
106+ DB .db_mark .like ('%{}%' .format (key )),
107+ DB .state .like ('%{}%' .format (key )),
108+ DB .db_env .like ('%{}%' .format (key )))).order_by (DB .id ).offset (
109+ limit_start ).limit (int (limit ))
70110
71111 for msg in db_info :
72112 tag_list = []
@@ -86,13 +126,38 @@ def get(self, *args, **kwargs):
86126 count = session .query (DB ).count ()
87127 db_info = session .query (DB ).order_by (DB .id ).all ()
88128 else :
89- if key and value :
90- count = session .query (DB ).filter_by (** {key : value }).count ()
91- db_info = session .query (DB ).filter_by (** {key : value }).order_by (DB .id ).offset (limit_start ).limit (
92- int (limit ))
129+ # TODO 超管查所有
130+ if self .is_superuser :
131+ if key and value :
132+ count = session .query (DB ).filter_by (** {key : value }).count ()
133+ db_info = session .query (DB ).filter_by (** {key : value }).order_by (DB .id ).offset (limit_start ).limit (
134+ int (limit ))
135+ else :
136+ count = session .query (DB ).count ()
137+ db_info = session .query (DB ).order_by (DB .id ).offset (limit_start ).limit (int (limit ))
93138 else :
94- count = session .query (DB ).count ()
95- db_info = session .query (DB ).order_by (DB .id ).offset (limit_start ).limit (int (limit ))
139+ # TODO 普通用户只给有权限的DB,根据用户查Tagid, 根据Tagid查询出来关联的DBID,根据DBID返回主机详情
140+ db_id_list = []
141+ with DBContext ('r' ) as session :
142+ # 子查询查出来server_id
143+ the_dbs = session .query (DBTag .db_id ).filter (DBTag .tag_id .in_ (
144+ session .query (Tag .id ).filter (or_ (Tag .users .like ('%{}%' .format (nickname ))))))
145+ for d in the_dbs :
146+ db_id_list .append (d [0 ])
147+ # 去重下列表,万一有重复的呢
148+ set_db_id_list = set (db_id_list )
149+ if key and value :
150+ # 根据Keyvalue获取
151+ count = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).filter_by (
152+ ** {key : value }).count ()
153+ db_info = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).filter_by (
154+ ** {key : value }).order_by (DB .id ).offset (
155+ limit_start ).limit (int (limit ))
156+ else :
157+ # 获取主机详情
158+ count = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).count ()
159+ db_info = session .query (DB ).filter (DB .id .in_ (set_db_id_list )).offset (
160+ limit_start ).limit (int (limit ))
96161
97162 for msg in db_info :
98163 tag_list = []
@@ -127,14 +192,16 @@ def post(self, *args, **kwargs):
127192 with DBContext ('r' ) as session :
128193 exist_id = session .query (DB .id ).filter (DB .db_code == db_code , DB .db_host == db_host , DB .db_port == db_port ,
129194 DB .db_user == db_user , DB .db_env == db_env ,
130- DB .proxy_host == proxy_host , DB .db_type == db_type ,db_version == db_version ,
195+ DB .proxy_host == proxy_host , DB .db_type == db_type ,
196+ db_version == db_version ,
131197 DB .db_mark == db_mark ).first ()
132198 if exist_id :
133199 return self .write (dict (code = - 2 , msg = '不要重复记录' ))
134200
135201 with DBContext ('w' , None , True ) as session :
136202 new_db = DB (db_code = db_code , db_host = db_host , db_port = db_port , db_user = db_user , db_pwd = db_pwd ,
137- db_env = db_env , proxy_host = proxy_host , db_type = db_type , db_version = db_version , db_mark = db_mark , db_detail = db_detail )
203+ db_env = db_env , proxy_host = proxy_host , db_type = db_type , db_version = db_version , db_mark = db_mark ,
204+ db_detail = db_detail )
138205 session .add (new_db )
139206
140207 all_tags = session .query (Tag .id ).filter (Tag .tag_name .in_ (tag_list )).order_by (Tag .id ).all ()
@@ -200,4 +267,4 @@ def delete(self, *args, **kwargs):
200267 (r"/v1/cmdb/db/" , DBHandler )
201268]
202269if __name__ == "__main__" :
203- pass
270+ pass
0 commit comments