Beispiel #1
0
 def run_unit_task(self, arg, stdout=False):
     if arg in conf_data('shell_unit'):
         cmd = conf_data('shell_unit', arg)
         data = self.run_cmd_task(cmd, stdout)
         return data
     else:
         return {"recode": 9, "redata": 'unit error'}
Beispiel #2
0
 def __init__(self):
     super(Nginx_Acl, self).__init__()
     self.user = conf_data("user_info", "default_user")
     service_script = conf_data("service_info", "local_service_script")
     self.reload_cmd = " ".join([service_script, "nginx", "reload"])
     self.deny_conf = conf_data("service_info", "nginx", "deny_conf")
     self.cache = NetCache()
Beispiel #3
0
    def run(self):
        task = self.data.get("task")
        arg = self.data.get("arg")
        ip = self.data.get("ip")
        user = self.data.get("user")
        work_log.info(str(self.data))

        if not user:
            user = conf_data("user_info", "default_user")
        elif user not in conf_data("user_info"):
            return {"recode": 1, "redata": "input user error"}

        if task == 'shell':
            try:
                info = HostBaseCmd(ip, user=user)
                return info.run_cmd_task(arg)
            except AttributeError as e:
                work_log.error("ssh session create error")
                work_log.error(str(e))
                return {"recode": 1, "redata": "input format error"}
            except Exception as e:
                work_log.error("run_cmd_task error")
                work_log.error(str(e))
                return {"recode": 9, "redata": "run other error"}

        elif task == 'unit':
            info = HostBaseCmd(ip, user=user)
            return info.run_unit_task(arg)
        elif task == 'script':
            info = HostBaseCmd(ip, user=user)
            return info.run_cmd_task(arg)
        else:
            work_log.info("req format error")
            return {"recode": 1, "redata": "format error"}
Beispiel #4
0
    def __init__(self):
        super(NetCache, self).__init__()
        redis_host = conf_data('redis', 'host')
        redis_port = conf_data('redis', 'port')
        self.r = redis.StrictRedis(host=redis_host,
                                   port=redis_port,
                                   decode_responses=True)

        self.NginxLockSet = 'set:nginxlockip'
Beispiel #5
0
    def unit(self, arg):
        work_log.info(f'unit: {arg}')
        if arg in conf_data('shell_unit'):
            cmd = conf_data('shell_unit', arg)
            redata = self.task.cmd(cmd)
        elif arg in ['disk_dict', 'uptime_dict', 'mem_dict']:
            redata = self.task.unit(cmd)
        else:
            return {"recode": 9, "redata": 'unit error'}

        data = {"recode": 0, "redata": redata}
        return data
Beispiel #6
0
    def run_unit_task(self, arg):

        if arg in conf_data('shell_unit'):
            cmd = conf_data('shell_unit', arg)
        else:
            return {"recode": 9, "redata": 'unit error'}

        try:
            recode, data = self.ssh_cmd(cmd, stdout=True)
            return {"recode": recode, "redata": data}
        except Exception as e:
            work_log.error("run_unit_task error")
            work_log.error(str(e))
            return {"recode": 9, "redata": str(e)}
Beispiel #7
0
    def send_mess(self, mobile_list, content):
        rspXml_body = []

        url = conf_data("sms_conf", "url")
        password = conf_data("sms_conf", "passwd")

        try:
            work_log.info(url)
            work_log.info(mobile_list)
            work_log.info(content)
            client = Client(url)
        except Exception as e:
            work_log.error("link sms webservice interface url error")
            work_log.error(str(e))
            return 1

        for mobile in mobile_list:
            reqXml = (
                """<?xml version=\"1.0\" encoding=\"UTF-8\"?> <SmsServiceReq><SmsList>
                <Mobile>""" + mobile + """</Mobile>
                <Contents><![CDATA[""" + content + """]]></Contents></SmsList>
            </SmsServiceReq>""")
            work_log.debug("-------------------------------------")
            work_log.debug(str(mobile))
            work_log.debug("send sms xml")
            work_log.debug(str(reqXml))
            work_log.debug("-------------------------------------")
            action = "00"
            target = "0101"
            brief = self.md5s(password + action + reqXml + target)
            try:
                rspXml = client.service.smsService(target, action, reqXml,
                                                   brief)
                work_log.info("send_mess yes-----------------------------")
                work_log.info(str(mobile))
                work_log.info(str(content))
                work_log.info("send_mess rspXml---------------------------")
                work_log.info(str(rspXml))
                work_log.info("send_mess yes-----------------------------")
            except Exception as e:
                work_log.error("send_mess error----------------------------")
                work_log.error(str(reqXml))
                work_log.error("send_mess error----------------------------")
                work_log.error(str(e))
                work_log.error("send_mess error----------------------------")
                return 2
            rspXml_body.append(rspXml)
        return rspXml_body
Beispiel #8
0
def v2_upload():
    work_log.debug(str(request.path))
    work_log.info("request host interface ip: %s" % (request.remote_addr))

    try:
        file = request.files["file"]
        ip = request.form["ip"]
        destdir = request.form["dir"]
        user = request.form["user"]
        if not ip or not destdir:
            return "", 404

        work_log.info(
            f"upload file, ip: {ip}, filename: {file.filename}, dest: {destdir}, user: {user}"
        )
        tmp_dir = conf_data("work_tmp_dir")
        local_tmp = os.path.join(tmp_dir, file.filename)
        dest = os.path.join(destdir, file.filename)
        file.save(local_tmp)  # 保存临时文件

        info = UpDownFile(ip, user)
        data = info.upload(local_tmp, dest)
        os.remove(local_tmp)  # 删除临时文件
        return jsonify(data)

    except Exception as e:
        work_log.error("upload file run error")
        work_log.error(str(e))
        return jsonify({"recode": 9, "redata": str(e)})
    else:
        return "", 200
Beispiel #9
0
    def Shield(self, zone, ip, port, cancel=None):
        hosts = conf_data("service_info", "nginx", zone)
        if not cancel and port != "all":
            # 屏蔽某个服务
            cmd = f'sed -i "/{ip}:{port}/s/server/#server/g" {self.upstream_conf}'
        elif not cancel and port == "all":
            # 屏蔽某个主机
            cmd = f'sed -i "/{ip}/s/server/#server/g" {self.upstream_conf}'
        elif cancel and port != "all":
            # 解除某个服务的屏蔽
            # 遗留:配置本行末的注释会被影响
            # 如果有多个#,则每次取消一个
            cmd = f'sed -i "/{ip}:{port}/s/#//" {self.upstream_conf}'
        elif cancel and port == "all":
            cmd = f'sed -i "/{ip}/s/#//g" {self.upstream_conf}'
            # 解除某个主机的屏蔽

        info = HostGroupCmd(hosts, self.user)
        try:
            info.run_cmd_task(cmd)
            info.run_cmd_task(self.reload_cmd)
            # 没有报错就算成功了,暂时忽略了多个主机个别错误的情况
            return {"recode": 0, "redata": "success"}
        except Exception as e:
            work_log.error(str(e))
            return {"recode": 2, "redata": "remote run error"}
Beispiel #10
0
    def down(self):
        try:
            ip = self.data.get("ip")
            file = self.data.get("file")
            user = self.data.get("user")
            if self.data.get("task") != 'remote_file_down':
                return {"recode": 1, "redata": "req arg error"}

            work_log.info(
                f"down file, ip: {ip}, filename: {file}, user: {user}")

            tmp_dir = conf_data("work_tmp_dir")
            filename = os.path.basename(file)
            local_tmp = os.path.join(tmp_dir, filename)

            info = UpDownFile(ip, user)
            data = info.down(file, local_tmp)
            if data:
                return {"recode": 0, "redata": f"api/v2/downfile/{filename}"}
            else:
                return {"recode": 2, "redata": "file not fount"}

        except Exception as e:
            work_log.error("down file run error")
            work_log.error(str(e))
            return {"recode": 9, "redata": str(e)}
Beispiel #11
0
    def net_port_scan(self, ip, port):
        try:
            work_dir = conf_data("work_dir")
            source_file = work_dir + "/utils/port_scan.py"
            des_file = "/tmp/port_scan.py"
            work_log.debug("copy file to remote")
            self.ssh_file_put(source_file, des_file)
        except Exception as e:
            work_log.error('scp port check file to remote server error')
            return 9

        cmd0 = "chmod u+x " + des_file
        cmd1 = des_file + " " + ip + " " + str(port)
        cmd2 = "rm " + des_file

        try:
            work_log.debug("chmod file")
            self.ssh_cmd(cmd0)

            work_log.debug("exec remote file")
            cmdstatus, taskstatus = self.ssh_cmd(cmd1, stdout=True)
            work_log.info(str(taskstatus))

            work_log.debug("rm file to remote")
            self.ssh_cmd(cmd2)

            recode = int(taskstatus.rstrip("\n"))
            work_log.info(str(recode))
        except Exception as e:
            work_log.error("remote exec cmd error")
            work_log.error(str(e))
            recode = 2
        return recode
        work_log.debug("port scan recode: %s" % recode)
Beispiel #12
0
    def __init__(self, ip, user=None, scp=None):
        if not user:
            ssh_user = conf_data("user_info", "default_user")
        else:
            ssh_user = user
        try:
            ssh_pw = conf_data("user_info", str(ssh_user), "ssh_passwd")
            key = conf_data("user_info", str(ssh_user), "ssh_key")
            ssh_port = conf_data("user_info", "ssh_port")
        except Exception as e:
            work_log.info("ssh arg input error")
            work_log.info(str(e))
            raise e

        self.ip = ip

        if key:
            ssh_key = conf_data("work_conf_dir") + "/" + key

        try:
            if ssh_key and not scp:
                Myssh.__init__(self, ip, ssh_user, keys=ssh_key, port=ssh_port)
            elif ssh_key and scp:
                Myssh.__init__(self,
                               ip,
                               ssh_user,
                               keys=ssh_key,
                               port=ssh_port,
                               scp=True)
            elif ssh_pw and scp:
                Myssh.__init__(self,
                               ip,
                               ssh_user,
                               passwd=ssh_pw,
                               port=ssh_port,
                               scp=True)
            elif ssh_pw and not scp:
                Myssh.__init__(self,
                               ip,
                               ssh_user,
                               passwd=ssh_pw,
                               port=ssh_port)

        except Exception as e:
            work_log.error('ssh login server error')
            work_log.error(str(e))
            raise e
Beispiel #13
0
def v2_downfile(file_name):
    '''从服务器自身的临时目录下载文件'''
    work_log.debug("---------------")
    work_log.debug(str(request.path))
    work_log.info("request host interface ip: %s" % (request.remote_addr))

    if request.method == "GET":
        tmp_dir = conf_data("work_tmp_dir")
        return send_from_directory(tmp_dir, file_name, as_attachment=True)
Beispiel #14
0
 def get_host_task(self, ip):
     '''获取一个主机的任务列表'''
     data = []
     for i in conf_data("app_group").values():
         if ip in i:
             for port in i.get(ip):
                 data.append([ip, port])
     return data
     work_log.info(data)
Beispiel #15
0
 def showprojectlog(self):
     # 查看业务日志
     log_out = conf_data("service_info", "weblogic", "log_out")
     cmd = "tail -n 500 " + log_out.replace("1",
                                            str(int(self.port) - 17100))
     run_data = self._weblogic_ssh_cmd(cmd)
     if run_data[0] == 0:
         return {"recode": run_data[0], "redata": run_data[1]}
     else:
         return {"recode": run_data[0], "redata": run_data[1]}
Beispiel #16
0
 def showlogaccess(self):
     # 查看访问日志
     log_access = conf_data("service_info", "weblogic", "log_access")
     cmd = "tail -n 300 " + log_access.replace("1",
                                               str(int(self.port) - 17100))
     run_data = self._weblogic_ssh_cmd(cmd)
     if run_data[0] == 0:
         return {"recode": run_data[0], "redata": run_data[1]}
     else:
         return {"recode": run_data[0], "redata": run_data[1]}
Beispiel #17
0
    def check_group_weblogic_interface(self, groupname):
        '''检查一组服务'''

        UrlList = []
        for x, y in conf_data("app_group", groupname).items():
            for i in y:
                url = self.get_wg_check_url(x, i)
                UrlList.append(url)

        data = self.check_weblogic(UrlList, processes=20)
        return {"recode": 0, "redata": data}
Beispiel #18
0
    def check_all_weblogic_interface(self):
        '''检查全部服务'''

        UrlList = []
        group_all = conf_data("app_group")
        for group in group_all:
            for host in group_all.get(group):
                for port in group_all.get(group).get(host):
                    url = self.get_wg_check_url(host, port)
                    UrlList.append(url)

        data = self.check_weblogic(UrlList, processes=80)
        return {"recode": 0, "redata": data}
Beispiel #19
0
 def get_group_data(self):
     unit_list = []
     if self.group:
         info = conf_data("mc_group", self.group)
         for i in info:
             ip = i.split()[0]
             port = i.split()[1]
             unit_list.append([ip, port])
         return unit_list
     if self.mc_list:
         for i in self.mc_list:
             host = i.split()[0]
             port = i.split()[1]
             unit_list.append([ip, port])
         return unit_list
Beispiel #20
0
 def run_task_list(self, cmdlist):
     cmdlist.append(self.reload_cmd)  # add reload
     work_log.debug(f"{cmdlist}")
     hosts = conf_data("service_info", "nginx", "dmz")
     try:
         info = HostGroupCmd(hosts, self.user)
         for i in cmdlist:
             work_log.info(f"nginx lock task, exec: {i}")
             run_data_list = info.run_cmd_task(i)
             work_log.info(str(run_data_list))
             work_log.debug("--------------------------")
         # 遗留问题,此处只处理了最后一个返回结果
         return self.get_run_data(run_data_list)
         work_log.debug("lock task all run")
         # return {"redata": "success", "recode": 0}
     except Exception as e:
         work_log.error(str(e))
         return {"recode": 2, "redata": "nginx server error"}
Beispiel #21
0
 def __init__(self):
     super(NginxManager, self).__init__()
     self.user = conf_data("user_info", "default_user")
     service_script = conf_data("service_info", "local_service_script")
     self.start_cmd = " ".join([service_script, "nginx", "start"])
     self.stop_cmd = " ".join([service_script, "nginx", "stop"])
     self.reload_cmd = " ".join([service_script, "nginx", "reload"])
     self.nginx_access_log = conf_data("service_info", "nginx",
                                       "nginx_access_log")
     self.nginx_error_log = conf_data("service_info", "nginx",
                                      "nginx_error_log")
     self.master_conf = conf_data("service_info", "nginx", "master_conf")
     self.upstream_conf = conf_data("service_info", "nginx",
                                    "upstream_conf")
Beispiel #22
0
    def weblogic(self, data):
        task = data.get("task")
        types = data.get("types")
        work_log.debug("---------------- weblogic task start ----------------")

        if types == 'single':
            work_log.debug(str(data))
            server = data.get("server")
            port = data.get("port")
            info = WeblogicManagerSingle(server, port)
            return info.run_task(task)

        elif types == 'group':
            group = data.get("group")
            work_log.debug(group)

            # 全部服务检查
            if group == "all" and task == "check":
                work_log.debug(f"wg check all service")
                info = WeblogicManagerCheck()
                return info.check_all_weblogic_interface()

            if group not in conf_data("app_group"):
                work_log.debug(f"weblogic grou not find")
                return {"recode": 9, "redata": "参数错误"}

            if task == "check":
                work_log.debug(f"wg check group: {group}")
                info = WeblogicManagerCheck()
                return info.check_group_weblogic_interface(group)
            elif task in ["start", "stop"]:
                work_log.debug(f"wg group: {task} {group}")
                info = WeblogicManagerGroup(group)
                return info.run_task_group(task)
            else:
                work_log.debug(f"wg check args error")
                return {"recode": 9, "redata": "参数错误"}
        else:
            work_log.debug(f"weblogic types args error")
            return {"recode": 9, "redata": "参数错误"}
Beispiel #23
0
    def memcached(self, data):
        types = data.get("types")
        task = data.get("task")

        if types == 'single':
            server = data.get("server")
            port = data.get("port")
            if task in ["start", "stop"]:
                info = MemcachedManagerSingle(server, port)
                return info.run_task(task)

        if types == 'group':
            group = data.get("group")
            if group not in conf_data("mc_group"):
                work_log.debug(f"memcached grou not find")
                return {"recode": 9, "redata": "参数错误-group错误"}

            if task in ["start", "stop"]:
                info = MemcachedManagerGroup(group)
                return info.run_task(task)

            return {"recode": 1, "redata": "format error"}
        return {"recode": 1, "redata": "format error"}
Beispiel #24
0
    def run(self):
        work_log.info(str(self.data))
        task = self.data.get("task")
        arg = self.data.get("arg")
        ip = self.data.get("ip")
        user = self.data.get("user")
        group = self.data.get("group")
        stdout = self.data.get("stdout")

        if group:
            if group in conf_data('host_mgr_type'):
                ip = conf_data('host_mgr_type', group)
            else:
                work_log.info("group name error")
                return {"recode": 1, "redata": "format error"}

        if not user:
            user = conf_data("user_info", "default_user")
        elif user not in conf_data("user_info"):
            return {"recode": 1, "redata": "input user error"}

        if task == 'shell':
            return self.group_task_exec(ip, user, arg, stdout)
        elif task == 'unit':
            if arg not in conf_data('shell_unit'):
                return {"recode": 9, "redata": 'unit error'}

            cmd = conf_data('shell_unit', arg)
            return self.group_task_exec(ip, user, cmd, stdout)

        elif task == 'script':
            info = HostGroupCmd(ip, user=user)
            return info.run_cmd_task(arg)
        else:
            work_log.info("req format error")
            return {"recode": 1, "redata": "format error"}
Beispiel #25
0
 def __init__(self, ip, port=None):
     super(WeblogicManagerSingle, self).__init__()
     self.ip = ip
     self.port = port
     self.user = conf_data("service_info", "weblogic", "default_user")
     self.service_script = conf_data("service_info", "local_service_script")
Beispiel #26
0
 def get_group_host(self):
     info = conf_data("app_group", self.group)
     return info.keys()
Beispiel #27
0
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from app.main.conf import conf_data
from app.utils.mylog import My_log

app = Flask(__name__)

db_url = conf_data('db', 'BUNNYC_MYSQL_URL')
db_user = conf_data('db', 'BUNNYC_MYSQL_USER')
db_pw = conf_data('db', 'BUNNYC_MYSQL_PW')
db_name = conf_data('db', 'BUNNYC_MYSQL_DB')

app.config[
    'SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{db_user}:{db_pw}@{db_url}/{db_name}'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# app.config['SQLALCHEMY_ECHO'] = True

log_file = conf_data("work_log")
log_level = conf_data("log_level")
work_log = My_log(log_file, log_level).get_log()

db = SQLAlchemy(app)

from app.views import apiv2
from app.views import local
from app.views import host
from app.views import cmdb
from app.views import network
from app.views import nginx_acl
from app.views import monitor
from app.views import sms
Beispiel #28
0
 def __init__(self, ip, port):
     super(MemcachedManagerSingle, self).__init__()
     self.ip = ip
     self.port = port
     self.user = conf_data("user_info", "default_user")
     self.service_script = conf_data("service_info", "local_service_script")
Beispiel #29
0
 def get_wg_check_url(self, ip, port):
     '''拼接任务URL'''
     return f"http://{ip}:{port}" + conf_data("service_info", "weblogic",
                                              "weblogic_interface")