|
|
|
@ -0,0 +1,218 @@
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
import random
|
|
|
|
|
|
|
|
|
|
from sqlalchemy import text
|
|
|
|
|
|
|
|
|
|
from website import errors
|
|
|
|
|
from website import settings
|
|
|
|
|
from website.db.enterprise_device.enterprise_device import EnterpriseEntityRepository as EntRepo
|
|
|
|
|
from website.db_mysql import to_json_list, to_json
|
|
|
|
|
from website.handler import APIHandler, authenticated
|
|
|
|
|
from website.util import aes
|
|
|
|
|
from website.util import shortuuid
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AddHandler(APIHandler):
|
|
|
|
|
"""
|
|
|
|
|
- 描述:新建服务器
|
|
|
|
|
- 请求方式:post
|
|
|
|
|
- 请求参数:
|
|
|
|
|
> - entity_id, int, 企业id
|
|
|
|
|
> - name, string, 服务器名称
|
|
|
|
|
> - ip, string,
|
|
|
|
|
> - port, int, 默认端口
|
|
|
|
|
> - username, string, 用户名
|
|
|
|
|
> - passwd, string,
|
|
|
|
|
|
|
|
|
|
- 返回值:无
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
@authenticated
|
|
|
|
|
def post(self):
|
|
|
|
|
entity_id = self.get_int_argument('entity_id')
|
|
|
|
|
name = self.get_escaped_argument('name', '')
|
|
|
|
|
ip = self.get_escaped_argument('ip', '')
|
|
|
|
|
port = self.get_int_argument("port", 22)
|
|
|
|
|
username = self.get_escaped_argument('username', '')
|
|
|
|
|
passwd = self.get_escaped_argument('passwd', '')
|
|
|
|
|
|
|
|
|
|
if not entity_id:
|
|
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "entity_id is required")
|
|
|
|
|
e = EntRepo()
|
|
|
|
|
entity_suid = e.get_entity_suid(entity_id)
|
|
|
|
|
if not entity_suid:
|
|
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "entity is invalid")
|
|
|
|
|
|
|
|
|
|
with self.app_mysql.connect() as conn:
|
|
|
|
|
conn.execute(
|
|
|
|
|
text(
|
|
|
|
|
"insert into "
|
|
|
|
|
"enterprise_server(suid, entity_id, entity_suid, name, ip, port, username, passwd) "
|
|
|
|
|
"values(:suid, :entity_id, :entity_suid, :name, :ip, :port, :username, :passwd) "
|
|
|
|
|
),
|
|
|
|
|
{
|
|
|
|
|
"suid": shortuuid.ShortUUID().random(10),
|
|
|
|
|
"entity_id": entity_id,
|
|
|
|
|
"entity_suid": entity_suid,
|
|
|
|
|
"name": name,
|
|
|
|
|
"ip": ip,
|
|
|
|
|
"port": port,
|
|
|
|
|
"username": username,
|
|
|
|
|
"passwd": aes.encrypt(settings.enterprise_aes_key, passwd)
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
|
self.finish()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ListHandler(APIHandler):
|
|
|
|
|
"""
|
|
|
|
|
- 描述:服务器列表
|
|
|
|
|
- 请求方式:post
|
|
|
|
|
- 请求参数:
|
|
|
|
|
> - entity_id, int, 企业id
|
|
|
|
|
> - status, int, 1000/all/默认, 1001/在线,1002/离线
|
|
|
|
|
> - pageNo, int,
|
|
|
|
|
> - pageSize, int
|
|
|
|
|
- 返回值:
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
"count": 123,
|
|
|
|
|
"data": [
|
|
|
|
|
{
|
|
|
|
|
"id": 123,
|
|
|
|
|
"name": "xx",
|
|
|
|
|
"status": 1001, # 状态, 1001/在线,1002/离线
|
|
|
|
|
"cpu": 123,
|
|
|
|
|
"mem": 123,
|
|
|
|
|
"storage": 213,
|
|
|
|
|
"gpu": 123,
|
|
|
|
|
},
|
|
|
|
|
...
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
@authenticated
|
|
|
|
|
def post(self):
|
|
|
|
|
entity_id = self.get_int_argument('entity_id')
|
|
|
|
|
status = self.get_int_argument("status")
|
|
|
|
|
pageNo = self.get_int_argument("pageNo", 1)
|
|
|
|
|
pageSize = self.get_int_argument("pageSize", 10)
|
|
|
|
|
if not entity_id:
|
|
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "entity_id is required")
|
|
|
|
|
if status and status not in (1001, 1002):
|
|
|
|
|
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "status is invalid")
|
|
|
|
|
|
|
|
|
|
with self.app_mysql.connect() as conn:
|
|
|
|
|
p = {}
|
|
|
|
|
sql_count = "select count(1) from enterprise_server where entity_id=:entity_id"
|
|
|
|
|
sql_data = "select id, name, status from enterprise_server where entity_id=:entity_id"
|
|
|
|
|
p.update({"entity_id": entity_id})
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
sql_count += " and status=:status"
|
|
|
|
|
sql_data += " and status=:status"
|
|
|
|
|
p.update({"status": status})
|
|
|
|
|
|
|
|
|
|
count = conn.scalar(text(sql_count), p)
|
|
|
|
|
data = conn.execute(text(sql_data), p).limit(pageSize).offset((pageNo - 1) * pageSize)
|
|
|
|
|
|
|
|
|
|
status_dic = {1001: 0, 1002: 0}
|
|
|
|
|
sql_status = "select status, count(id) c from enterprise_server where entity_id=:entity_id group by status"
|
|
|
|
|
status_cur = conn.execute(text(sql_status), p)
|
|
|
|
|
status_list = to_json_list(status_cur)
|
|
|
|
|
for item in status_list:
|
|
|
|
|
status_dic[item["status"]] = item["c"]
|
|
|
|
|
|
|
|
|
|
for item in data:
|
|
|
|
|
item.update(
|
|
|
|
|
{"cpu": random.randint(20, 30),
|
|
|
|
|
"mem": random.randint(20, 30),
|
|
|
|
|
"storage": random.randint(20, 30),
|
|
|
|
|
"gpu": random.randint(20, 30), })
|
|
|
|
|
|
|
|
|
|
self.finish({"count": count, "data": to_json_list(data), "status": status_dic})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InfoHandler(APIHandler):
|
|
|
|
|
"""
|
|
|
|
|
- 描述:服务器信息
|
|
|
|
|
- 请求方式:post
|
|
|
|
|
- 请求参数:
|
|
|
|
|
> - server_id, int, 服务器id
|
|
|
|
|
- 返回值:
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
"name": "xx",
|
|
|
|
|
"ip": "xxx",
|
|
|
|
|
"port": "xxx",
|
|
|
|
|
"username": "xxx",
|
|
|
|
|
"cpu": 123,
|
|
|
|
|
"mem": 123,
|
|
|
|
|
"storage": 213,
|
|
|
|
|
"gpu": 123,
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
@authenticated
|
|
|
|
|
def post(self):
|
|
|
|
|
server_id = self.get_int_argument('server_id')
|
|
|
|
|
with self.app_mysql.connect() as conn:
|
|
|
|
|
cur = conn.execute(
|
|
|
|
|
text("select name, ip, port, username from enterprise_server where id=:id"),
|
|
|
|
|
{"id": server_id})
|
|
|
|
|
data = to_json(cur)
|
|
|
|
|
if data:
|
|
|
|
|
data.update(
|
|
|
|
|
{"cpu": random.randint(20, 30),
|
|
|
|
|
"mem": random.randint(20, 30),
|
|
|
|
|
"storage": random.randint(20, 30),
|
|
|
|
|
"gpu": random.randint(20, 30), })
|
|
|
|
|
self.finish(data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeleteHandler(APIHandler):
|
|
|
|
|
@authenticated
|
|
|
|
|
def post(self):
|
|
|
|
|
server_id = self.get_int_argument('server_id')
|
|
|
|
|
with self.app_mysql.connect() as conn:
|
|
|
|
|
conn.execute(
|
|
|
|
|
text("delete from enterprise_server where id=:id"), {"id": server_id}
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
self.finish()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LogHandler(APIHandler):
|
|
|
|
|
"""
|
|
|
|
|
- 描述:服务器列表
|
|
|
|
|
- 请求方式:post
|
|
|
|
|
- 请求参数:
|
|
|
|
|
> - server_id, int, 服务器id
|
|
|
|
|
> - pageNo, int
|
|
|
|
|
> - pageSize, int
|
|
|
|
|
- 返回值:
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
@authenticated
|
|
|
|
|
def post(self):
|
|
|
|
|
entity_id = self.get_int_argument('entity_id')
|
|
|
|
|
pageNo = self.get_int_argument('pageNo', 1)
|
|
|
|
|
pageSize = self.get_int_argument('pageSize', 10)
|
|
|
|
|
|
|
|
|
|
with self.app_mysql.connect() as conn:
|
|
|
|
|
p = {}
|
|
|
|
|
sql_count = "select count(1) from enterprise_server where entity_id=:entity_id"
|
|
|
|
|
sql_data = "select id, name, ip, port from enterprise_server where entity_id=:entity_id"
|
|
|
|
|
p.update({"entity_id": entity_id})
|
|
|
|
|
|
|
|
|
|
count = conn.scalar(text(sql_count), p)
|
|
|
|
|
data = conn.execute(text(sql_data), p).order_by(text("id desc")).limit(pageSize).offset(
|
|
|
|
|
(pageNo - 1) * pageSize)
|
|
|
|
|
|
|
|
|
|
data = to_json_list(data)
|
|
|
|
|
self.finish({"count": count, "data": data})
|