Ejemplo n.º 1
0
    def form_valid(self, form):
        obj = form.save(commit=False)
        now  = sdate().datetime_human()
        update_or_add_fds = {
            "update_dt": now,
        }
        for (k, v) in update_or_add_fds.iteritems():
            setattr(obj, k, v)
        # select2
        #obj.iphosts = ";".join(self.request.POST.getlist("iphosts",[]))
        #return super(QBaseDetailView, self).form_valid(form)
        
        ## m2m field update
        obj.save()
        
        tasks = self.request.POST.get("tasks", None)
        if not tasks:
            return self.ret_err_msg("tasks", "任务", "任务不能为空")
        taskids = [int(tid) for tid in str(tasks).strip("|").split("|")]

        #print tasks, taskids
        for tct in obj.comm_tasks.all(): ## 先删除
            obj.comm_tasks.remove(tct)
            
        for tid in taskids: ## 顺序新增
            ct = models.Comm_Task_Def.objects.get(id=tid)
            obj.comm_tasks.add(ct)
        return QBaseDetailView.form_valid(self, form)
Ejemplo n.º 2
0
    def stop(self, section_id=None):
        itemconf = self._chp.get_section_dict(section_id)
        appname = itemconf.get("appname", None)
        stop_cmd = itemconf.get("stop_cmd", None)
        self._logger.dictlog(level="info", width=20, **itemconf)

        scolor.info(u"#### [%s] 停止应用【%s】 ####" %
                    (sdate().datetime_human(), appname))
        if str(stop_cmd).strip() == None:
            scolor.warn(u"应用【%s】停止命令为空" % (appname))
            return

        c2 = cmds(stop_cmd)
        stdo = c2.stdo()
        stde = c2.stde()
        retcode = c2.code()

        #exeop = str("%s\n%s" % (stdo,stde)).strip()
        if retcode == 0 and str(stde).strip() == "":
            scolor.info(u"停止应用【%s】成功!" % (appname))
        else:
            scolor.error(u"停止应用【%s】失败!" % (appname))

        logobj = {
            u"命令": stop_cmd,
            u"标准输出": stdo,
            u"错误输出": stde,
            u"返回码": retcode,
            u"orders": [u"命令", u"标准输出", u"错误输出", u"返回码"]
        }
        self._logger.dictlog(level="info", width=12, **logobj)
Ejemplo n.º 3
0
 def form_valid(self, form):
     now  = sdate().datetime_human()
     super(AddView, self).form_valid(form)
     # 这里要加上
     form.instance.create_dt = now
     form.instance.update_dt= now    
     return super(AddView, self).form_valid(form)
Ejemplo n.º 4
0
    def post(self, request, *args, **kwargs):
        obj = {}
        exclude_fields = ["__action" , "csrfmiddlewaretoken" , "create_dt", "update_dt", "create_user"]
        actions = ["clone", "update", "delete"] 
        
        postdic = dict(request.POST)
        action = postdic.get("__action", "None")
        action = str(action[0]).lower()

        print postdic
        for k,vs in postdic.items():
            if k in exclude_fields: continue
            obj[k] = vs[0]

        if action not in actions or "id" not in obj:
            return HttpResponse(status=403)
        
        mdl = models.Task_Def.objects
        resp_data = {"action":action}
        if action == "clone":
            del(obj["id"])
            obj["create_user"] = self.request.user.get_username() 
            crt_obj = mdl.create(**obj)
            new_url = reverse_lazy("jobtask:taskdef-detail", args=(crt_obj.id,))
            resp_data["new_url"] = new_url
            resp_data["id"] = crt_obj.id
        if action == "update":
            obj["update_dt"] = sdate().datetime_human()
            rows = mdl.filter(id=int(obj["id"])).update(**obj)
            resp_data["rows"] = rows
        if action == "delete":
            deleted, _rows_count = mdl.filter(id=int(obj["id"])).delete()
            resp_data["deleted"] = deleted

        return HttpResponse(JsonResponse(resp_data), content_type="application/json")  
Ejemplo n.º 5
0
    def form_valid(self, form):
        obj = form.save(commit=False)
        now = sdate().datetime_human()
        update_or_add_fds = {
            "create_dt": now,
            "update_dt": now,
            "create_user": self.request.user.username or 'Admin',
        }
        for (k, v) in update_or_add_fds.iteritems():
            setattr(obj, k, v)
        #obj.iphosts = ";".join(self.request.POST.getlist("iphosts",[]))
        #return super(QBaseCreateView, self).form_valid(form)
        #print self.request.POST.getlist("comm_tasks")

        obj.save()
        #comm_tasks = form.cleaned_data["comm_tasks"]
        tasks = self.request.POST.get("tasks", None)
        if not tasks:
            return self.ret_err_msg("tasks", "任务", "任务不能为空")
        taskids = [int(tid) for tid in str(tasks).strip("|").split("|")]

        #print tasks, taskids
        for tid in taskids:
            ct = models.Comm_Task_Def.objects.get(id=tid)
            models.CommJobTaskConfig.objects.create(comm_job_id=obj.id,
                                                    comm_task_id=ct.id)
            #obj.comm_tasks.add(ct)
        return QBaseCreateView.form_valid(self, form)
Ejemplo n.º 6
0
 def form_valid(self, form):
     obj = form.save(commit=False)
     now = sdate().datetime_human()
     update_or_add_fds = {
         "update_dt": now,
     }
     for (k, v) in update_or_add_fds.iteritems():
         setattr(obj, k, v)
     #return super(QBaseDetailView, self).form_valid(form)
     return QBaseDetailView.form_valid(self, form)
Ejemplo n.º 7
0
 def form_valid(self, form):
     obj = form.save(commit=False)
     now = sdate().datetime_human()
     update_or_add_fds = {
         "create_dt": now,
         "update_dt": now,
         "create_user": self.request.user.username or 'Admin',
     }
     for (k, v) in update_or_add_fds.iteritems():
         setattr(obj, k, v)
     #return super(QBaseCreateView, self).form_valid(form)
     return QBaseCreateView.form_valid(self, form)
Ejemplo n.º 8
0
 def form_valid(self, form):
     obj = form.save(commit=False)
     now = sdate().datetime_human()
     update_or_add_fds = {
         "update_dt": now,
     }
     for (k, v) in update_or_add_fds.iteritems():
         setattr(obj, k, v)
     # select2
     obj.iphosts = ";".join(self.request.POST.getlist("iphosts", []))
     #return super(QBaseDetailView, self).form_valid(form)
     return QBaseDetailView.form_valid(self, form)
Ejemplo n.º 9
0
 def form_valid(self, form):
     self.taskdef = taskdef = form.save(commit=False)
     now = sdate().datetime_human()
     taskdef.create_user = self.request.user.username or 'Admin'
     taskdef.create_dt = now
     taskdef.update_dt = now
     taskdef.save()
     result = super(AddView, self).form_valid(
         form)  # django.http.response.HttpResponseRedirect
     #return result
     respdata = {"id": taskdef.id, "msg": "success"}
     # 返回JSON,可以在同一个页面多次添加
     return HttpResponse(JsonResponse(respdata),
                         content_type="application/json")
Ejemplo n.º 10
0
def add(request):
    if request.method == "POST":
        form = forms.TaskDefForm(request.POST, request.FILES)  ## 文件上传,注意写法
        if form.is_valid():
            cd = form.cleaned_data
            now = sdate().datetime_human()
            cd["create_dt"] = now
            cd["update_dt"] = now
            models.Task_Def.objects.create(**cd)
            return HttpResponseRedirect("/thanks/")
    else:
        form = forms.TaskDefForm()

    context = locals()
    context["form"] = form
    context["title"] = u"任务定义"
    return render(request, "jobtask/taskdef_new.html", context)  ## 为让csrf生效,需要使用render函数,而不能使用render_to_response
Ejemplo n.º 11
0
    def send_mail(self, tolist, title, content, fmt="plain"):
        assert type(tolist) == types.ListType
        self._login()
        try:
            appstr = self._app + ", " if self._app else ""
            m_content = "\
                    %s \
                    \n\n\
                    -------------------------------------------------------------------------\n\
                    %sAuto Send @%s, Please Do Not Reply! \n\
                    " % (content, appstr, sdate().datetime())

            if fmt == "html":
                m_content = m_content.replace("\n", "<br />")
            m_charset = "utf-8"
            msg = MIMEText(m_content, _subtype=fmt, _charset=m_charset)
            msg['Subject'] = title  #email title
            msg['From'] = self._username  #sender
            msg['To'] = ','.join(tolist)  #recipient
            msg['date'] = time.strftime(
                '%a, %d %b %Y %H:%M:%S %z')  #define send datetime
            res = self._smtp.sendmail(self._username, tolist, msg.as_string())

            if self._logger:
                logobj = {}
                logobj['Topic'] = "SEND MAIL"
                logobj['Subject'] = title  #email title
                logobj['From'] = self._username  #sender
                logobj['To'] = ','.join(tolist)  #recipient
                logobj['date'] = time.strftime(
                    '%a, %d %b %Y %H:%M:%S %z')  #define send datetime
                logobj['result'] = res
                logobj['orders'] = [
                    "Topic", "Subject", "From", "To", "res", "date"
                ]
                self._logger.dictlog("info", width=8, **logobj)
            if not res:  ## 返回空字典,说明都发送成功
                return True
        except Exception, data:
            import traceback
            tb = traceback.format_exc()
            if self._logger:
                logobj = {}
                logobj['traceback'] = tb  #email title
                self._logger.dictlog("warn", width=10, **logobj)
Ejemplo n.º 12
0
 def form_valid(self, form):
     ## form_valid验证通过后,这里才能做更新
     self.taskdef = taskdef = form.save(commit=False)
     now = sdate().datetime_human()
     taskdef.create_user = self.request.user.username or 'Admin'
     taskdef.create_dt = now
     taskdef.update_dt = now
     taskdef.save()
     #print self.request.META.get("PATH_INFO",None)
     respdata = {
         "code": 0,
         "errmsg": "success",
         "action": self.request.GET.get("_action", "None")
     }
     self.respdata.update(respdata)
     # 返回JSON,可以在同一个页面多次添加
     return HttpResponse(JsonResponse(respdata),
                         content_type="application/json")
Ejemplo n.º 13
0
 def form_valid(self, form):
     obj = form.save(commit=False)
     now  = sdate().datetime_human()
     update_or_add_fds = {
         "update_dt": now,
     }
     for (k, v) in update_or_add_fds.iteritems():
         setattr(obj, k, v)
     # select2
     #obj.iphosts = ";".join(self.request.POST.getlist("iphosts",[]))
     #return super(QBaseDetailView, self).form_valid(form)
     
     ## m2m field update
     obj.save()
     
     comm_tasks = form.cleaned_data["comm_tasks"]
     obj.comm_tasks.set(comm_tasks)
     return QBaseDetailView.form_valid(self, form)
Ejemplo n.º 14
0
    def status(self, section_id=None):
        itemconf = self._chp.get_section_dict(section_id)
        appname = itemconf.get("appname", None)
        process_uniq_flag = itemconf.get("process_uniq_flag", None)
        process_port = itemconf.get("process_port", None)
        status_cmd = itemconf.get("status_cmd", None)
        self._logger.dictlog(level="info", width=20, **itemconf)

        scolor.info(u"#### [%s] 检测应用【%s】状态 ####" %
                    (sdate().datetime_human(), appname))
        if status_cmd and str(status_cmd).strip():
            c2 = cmds(status_cmd, timeout=10)
            stdo, stde, retcode = c2.stdo(), c2.stde(), c2.code()
            logdict = {
                "命令": status_cmd,
                "标准输出": stdo,
                "标准错误输出": stde,
                "返回码": retcode,
                "orders": ["命令", "标准输出", "标准错误输出", "返回码"],
            }
            self._logger.dictlog(level="info", width=10, **logdict)
            scolor.info(u"-> 根据用户指定的状态命令检测应用状态")
            print "    命令:%s" % (status_cmd)
            print "执行结果:"
            print "========="
            print str(str(stdo).strip() + "\n" + str(stde).strip()).strip()

        if process_uniq_flag and str(process_uniq_flag).strip():
            (flag, cmdstr, stdo, stde,
             retcode) = self.is_process_exist(process_uniq_flag)
            scolor.info(u"-> 根据应用进程唯一标识检测")
            print "    命令:%s" % (cmdstr)
            print "执行结果:"
            print "========="
            print str(str(stdo).strip() + "\n" + str(stde).strip()).strip()

        if process_port:
            (flag, cmdstr, stdo, stde,
             retcode) = self.is_port_exist(process_port)
            scolor.info(u"-> 根据应用进程端口检测")
            print "    命令:%s" % (cmdstr)
            print "执行结果:"
            print "========="
            print str(str(stdo).strip() + "\n" + str(stde).strip()).strip()
Ejemplo n.º 15
0
Archivo: mail.py Proyecto: qiueer/sam
    def send_mail(self, tolist, title, content, fmt="plain"):
            assert type(tolist) == types.ListType
            self._login()
            try:
                    appstr = self._app+", " if self._app else ""
                    m_content = "\
                    %s \
                    \n\n\
                    -------------------------------------------------------------------------\n\
                    %sAuto Send @%s, Please Do Not Reply! \n\
                    "  % (content, appstr, sdate().datetime())
                    
                    if fmt == "html":
                            m_content = m_content.replace("\n", "<br />")
                    m_charset = "utf-8"
                    msg=MIMEText(m_content, _subtype=fmt, _charset=m_charset)
                    msg['Subject']= title   #email title
                    msg['From']= self._username   #sender
                    msg['To']=','.join(tolist)  #recipient
                    msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')  #define send datetime
                    res = self._smtp.sendmail(self._username , tolist , msg.as_string())

                    if self._logger:
                        logobj = {}
                        logobj['Topic']= "SEND MAIL"
                        logobj['Subject']= title   #email title
                        logobj['From']= self._username   #sender
                        logobj['To']=','.join(tolist)  #recipient
                        logobj['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')  #define send datetime
                        logobj['result'] = res
                        logobj['orders']= ["Topic", "Subject", "From", "To", "res", "date"]
                        self._logger.dictlog("info", width=8, **logobj)
                    if not res: ## 返回空字典,说明都发送成功
                        return True
            except Exception,data:
                    import traceback
                    tb = traceback.format_exc()
                    if self._logger:
                        logobj = {}
                        logobj['traceback']= tb   #email title
                        self._logger.dictlog("warn", width=10, **logobj)
Ejemplo n.º 16
0
    def form_valid(self, form):
        obj = form.save(commit=False)
        now = sdate().datetime_human()
        update_or_add_fds = {
            "update_dt": now,
        }
        for (k, v) in update_or_add_fds.iteritems():
            setattr(obj, k, v)
        obj.save()

        tasks = self.request.POST.get("tasks", None)
        if not tasks:
            return self.ret_err_msg("tasks", "任务", "任务不能为空")
        taskids = [int(tid) for tid in str(tasks).strip("|").split("|")]

        models.CommJobTaskConfig.objects.filter(comm_job_id=obj.id).delete()

        for tid in taskids:  ## 顺序新增
            ct = models.Comm_Task_Def.objects.get(id=tid)
            models.CommJobTaskConfig.objects.create(comm_job_id=obj.id,
                                                    comm_task_id=ct.id)
            #obj.comm_tasks.add(ct)
        return QBaseDetailView.form_valid(self, form)
Ejemplo n.º 17
0
    def check(self, section_id=None):
        itemconf = self._chp.get_section_dict(section_id)
        appname = itemconf.get("appname", None)
        process_uniq_flag = itemconf.get("process_uniq_flag", None)
        process_port = itemconf.get("process_port", None)
        check_cmd = itemconf.get("check_cmd", None)
        check_str = itemconf.get("check_str", None)
        self._logger.dictlog(level="info", width=20, **itemconf)

        scolor.info(u"#### [%s] 检测应用【%s】运行状态 ####" %
                    (sdate().datetime_human(), appname))

        is_ok = True
        mt_method = {"False": scolor.error, "True": scolor.info}
        if check_cmd and check_str:
            check_flag, cmdstr, stdo, stde, retcode = self.is_check_ok(
                check_cmd, check_str)
            is_ok = is_ok and check_flag
            scolor.info(u"-> 根据检测命令检测")
            mt_method[str(check_flag)](str(check_flag))

        if process_uniq_flag:
            chk_proc_flag, cmdstr, stdo, stde, retcode = self.is_process_exist(
                process_uniq_flag)
            is_ok = is_ok and chk_proc_flag
            scolor.info(u"-> 根据应用进程唯一标识检测")
            mt_method[str(chk_proc_flag)](str(chk_proc_flag))

        if process_port:
            chk_proc_port_flag, cmdstr, stdo, stde, retcode = self.is_port_exist(
                process_port)
            is_ok = is_ok and chk_proc_port_flag
            scolor.info(u"-> 根据应用进程端口检测")
            mt_method[str(chk_proc_port_flag)](str(chk_proc_port_flag))

        return is_ok
Ejemplo n.º 18
0
    def post(self, request, *args, **kwargs):
        try:
            jobdef = get_object_or_404(models.Comm_Job_Def, id=args[0])
            now = timezone.now()
            jobid = sdate().datetime_ex()
            #new job
            job = {
                "jobid": jobid,
                "create_dt": now,
                "create_user": self.request.user.get_username(),
                "job_status": 2,
            }
            job = models.Job(**job)
            job.jobdef = jobdef
            job.job_class = jobdef.job_class
            job.save()

            for ct in jobdef.comm_tasks.all():
                jobtask = {
                    "file_loc": ct.task.file_loc,
                    "file": ct.task.file or ct.task.remote_file,
                    "main_script_name": ct.task.main_script_name,
                    "exe_user": ct.exe_user,
                    "params": ct.params,
                    "iphosts": ct.iphosts,
                    "timeout": ct.timeout,
                    "create_user": self.request.user.get_username(),
                    "create_dt": timezone.now(),
                    "job_task_status": 2
                }
                jt = models.Job_Task(**jobtask)
                jt.job = job
                jt.comm_task = ct
                jt.save()

                iphosts = re.split("[;|,|\s]+", ct.iphosts)
                for iphost in iphosts:
                    jobsubtask = {
                        "file_loc": ct.task.file_loc,
                        "file": ct.task.file or ct.task.remote_file,
                        "main_script_name": ct.task.main_script_name,
                        "params": ct.params or ct.task.params,
                        "executor": ct.task.executor,
                        "exe_user": ct.exe_user,
                        "iphost": iphost,
                        "create_dt": timezone.now(),
                        "task_status": 2,
                    }
                    jstask = models.Job_SubTask(**jobsubtask)
                    jstask.jobtask = jt
                    jstask.save()

            newurl = reverse_lazy("jobtask:job-detail",
                                  kwargs={
                                      'pk': job.id,
                                      "jobid": jobid
                                  })
            data = {
                "jobid": jobid,
                "msg": "success",
                "code": 0,
                "url": newurl
            }  ## 必填}
            return JsonResponse(data)
        except Exception:
            import traceback
            data = {"jobid": "", "msg": traceback.format_exc(), "code": 1}
            return JsonResponse(data)
Ejemplo n.º 19
0
def backup_one(conffile, input_section, debug=False):
    bc = conf_helper(conffile)
    itemconf = bc.get_section_dict(input_section)
    srcdir = itemconf.get("srcdir", None)
    destdir = itemconf.get("destdir", None)
    brange = itemconf.get("range", None)
    files = itemconf.get("files", None)
    logger = slog("/tmp/backup.log", debug=debug)
    if bc.has_section(input_section) == False:
        scolor.info("备份标识不存在: %s" % (input_section))
        return
    logobj = {
        u"备份标识": input_section,
        u"备份目录": srcdir,
        u"存储目录": destdir,
        u"范围(包含or不包含)": brange,
        u"文件(夹)列表": files,
        u"orders": [u"section", u"备份目录", u"存储目录", u"范围(包含or不包含)"]
    }
    logger.dictlog(level="info", width=20, **logobj)

    scolor.info(u"尝试执行备份任务,备份信息如下: ")
    scolor.info(u"===============================")
    print sstr().dictstr(width=20, **logobj)

    try:
        ## src dir
        srcdir = str(srcdir).strip()
        while '//' in str(srcdir):
            srcdir = str(srcdir).replace('//', '/')
        while str(srcdir).endswith('/'):
            srcdir = srcdir[:-1]
        pos = str(srcdir).rfind('/')
        dirroot = srcdir[:pos]  ##
        dirname = srcdir[pos + 1:]  ## relative dir name

        ## dest dir
        destdir = str(destdir).strip()
        while '//' in str(destdir):
            destdir = str(destdir).replace('//', '/')
        while str(destdir).endswith('/') and len(destdir) > 2:
            destdir = destdir[:-1]

        if os.path.exists(srcdir) == False or os.path.exists(destdir) == False:
            scolor.error(u"=> 备份任务")
            infobj = {
                u"状态": u"失败",
                u"错误": u"备份目录或存储目录不存在",
                u"备份目录": srcdir,
                u"存储目录": destdir,
                u"orders": [u"状态", u"错误", u"备份目录", u"存储目录"]
            }
            scolor.error(sstr().dictstr(width=8, **infobj))
            return

        if str(brange).lower().strip() not in ["include", "exclude"]:
            scolor.error(u"=> 备份任务")
            infobj = {
                u"状态": u"失败",
                u"错误": u"备份范围错误,只能是include或exclude",
                u"orders": [u"状态", u"错误"]
            }
            scolor.error(sstr().dictstr(width=4, **infobj))
            return

        ## include or exclude files
        files = str(files).strip()
        files_ary = re.split("[ |,|;]+", files)
        last_files = []
        if files_ary:
            for each_file in files_ary:
                if not each_file: continue
                while '//' in str(each_file):
                    each_file = str(each_file).replace('//', '/')
                while str(each_file).endswith('/'):
                    each_file = each_file[:-1]
                while str(each_file).startswith('/'):
                    each_file = each_file[1:]
                each_file = each_file.replace(" ", "")
                last_files.append(each_file)

        nowdt = sdate().datetime()
        nd = sdate().date()
        tarname = "%s_%s.tar.gz " % (dirname, nowdt)
        tmpfile = "/tmp/%s" % (tarname)
        last_destdir = "%s/%s/" % (destdir, nd)
        subffix = ""
        tar_cmdstr = ""
        if str(brange).lower().strip() == "include":
            for ef in last_files:
                subffix = subffix + dirname + "/" + ef + " "
            if str(subffix).strip() == "":  ## 备份整个目录
                tar_cmdstr = "cd %s && tar czf %s %s" % (dirroot, tmpfile,
                                                         dirname)
            else:  ## 备份指定的目录
                tar_cmdstr = "cd %s && tar czf %s %s" % (dirroot, tmpfile,
                                                         subffix)

        if str(brange).lower().strip() == "exclude":
            for ef in last_files:
                subffix = subffix + "--exclude=" + dirname + "/" + ef + " "
            tar_cmdstr = "cd %s && tar czf %s %s %s" % (dirroot, tmpfile,
                                                        dirname, subffix)

        c1 = cmds(tar_cmdstr, timeout=1800)
        stdo1 = c1.stdo()
        stde1 = c1.stde()
        retcode1 = c1.code()
        logobj = {
            u"命令": tar_cmdstr,
            u"标准输出": stdo1,
            u"错误输出": stde1,
            u"返回码": retcode1,
            u"orders": [u"命令", u"标准输出", u"错误输出", u"返回码"]
        }
        logger.dictlog(level="info", width=12, **logobj)

        ## 打包归档失败
        if retcode1 != 0:
            scolor.error(u"=> 备份任务")
            infobj = {
                u"状态": u"失败",
                u"错误": u"打包归档失败,具体:%s" % (stde1),
                u"orders": [u"状态", u"错误"]
            }
            scolor.error(sstr().dictstr(width=4, **infobj))
            return

        #cmdstr = "mkdir -p %s && mv %s %s && rm -frv %s" % (last_destdir, tmpfile, last_destdir, tmpfile)
        cmdstr = "mkdir -p %s && mv -v %s %s" % (last_destdir, tmpfile,
                                                 last_destdir)
        c2 = cmds(cmdstr)
        stdo2 = c2.stdo()
        stde2 = c2.stde()
        retcode2 = c2.code()
        logobj = {
            u"命令": cmdstr,
            u"标准输出": stdo2,
            u"错误输出": stde2,
            u"返回码": retcode2,
            u"orders": [u"命令", u"标准输出", u"错误输出", u"返回码"]
        }
        logger.dictlog(level="info", width=12, **logobj)
        if retcode2 != 0:
            scolor.error(u"=> 备份任务")
            infobj = {
                u"状态": u"失败",
                u"错误": u"创建目录或移动文件失败,具体:%s" % (stde1),
                u"orders": [u"状态", u"错误"]
            }
            scolor.error(sstr().dictstr(width=4, **infobj))
            return

        scolor.info(u"=> 备份任务")
        infobj = {
            u"状态": u"成功",
            u"原目录": srcdir,
            u"备份位置": "%s%s" % (last_destdir, tarname),
            u"orders": [u"状态", u"原目录"]
        }
        scolor.info(sstr().dictstr(width=8, **infobj))
    except:
        print traceback.format_exc()
Ejemplo n.º 20
0
 def get_initial(self):
     default_init = {}
     now = sdate().datetime_human()
     default_init['create_dt'] = now
     default_init['update_dt'] = now
     return default_init
Ejemplo n.º 21
0
Archivo: Task.py Proyecto: qiueer/VJob
    def post(self, request, *args, **kwargs):
        try:
            comm_taskdef = get_object_or_404(models.Comm_Task_Def, id=args[0])
            now = timezone.now()
            taskid = sdate().datetime_ex()

            #new job
            task_conf = {
                "taskid":
                taskid,
                "create_dt":
                now,
                "create_user":
                request.user.get_username(),
                "task_status":
                2,
                "params":
                comm_taskdef.params or comm_taskdef.task.params,
                "exe_user":
                comm_taskdef.exe_user,
                "iphosts":
                comm_taskdef.iphosts,
                "timeout":
                comm_taskdef.timeout,
                "fromip":
                request.META.get("HTTP_X_FORWARDED_FOR",
                                 request.META.get("REMOTE_ADDR", None))
            }
            task = models.Task(**task_conf)
            task.taskdef = comm_taskdef.task
            task.save()

            ct = comm_taskdef
            iphosts = re.split("[;|,|\s]+", comm_taskdef.iphosts)
            for iphost in iphosts:
                subtask = {
                    "file_loc": ct.task.file_loc,
                    "file": ct.task.file or ct.task.remote_file,
                    "params": ct.params or ct.task.params,
                    "executor": ct.task.executor,
                    "exe_user": ct.exe_user,
                    "iphost": iphost,
                    "create_dt": timezone.now(),
                    "task_status": 2,
                }
                stask = models.SubTask(**subtask)
                stask.task = task
                stask.save()

            newurl = reverse_lazy("jobtask:task-detail",
                                  kwargs={
                                      'pk': task.id,
                                      "taskid": taskid
                                  })
            data = {
                "taskid": taskid,
                "msg": "success",
                "code": 0,
                "url": newurl
            }  ## 必填}
            return JsonResponse(data)
        except Exception:
            import traceback
            data = {"taskid": "", "msg": traceback.format_exc(), "code": 1}
            return JsonResponse(data)
Ejemplo n.º 22
0
Archivo: Task.py Proyecto: qiueer/VJob
    def post(self, request, *args, **kwargs):
        try:
            request.POST.get("")
            taskdef = get_object_or_404(models.Task_Def, id=args[0])
            params = request.POST.get("params", None)
            exe_user = request.POST.get("exe_user", None)
            iphosts = request.POST.get("iphosts", None)
            timeout = request.POST.get("timeout", None)
            note = request.POST.get("note", None)

            if None in [iphosts, timeout, note]:
                data = {"taskid": "", "msg": "必填项不能为空", "code": 1}
                return JsonResponse(data)

            now = timezone.now()
            taskid = sdate().datetime_ex()
            #new job
            task_new = {
                "taskid": taskid,
                "params": params if params else taskdef.params,
                "iphosts": iphosts,
                "timeout": int(timeout),
                "create_dt": now,
                "create_user": self.request.user.get_username(),
                "task_status": 2,
                "note": note,
            }
            task = models.Task(**task_new)
            task.taskdef = taskdef
            task.save()

            iphosts = re.split("[;|,|\s]+", iphosts)
            for iphost in iphosts:
                subtask = {
                    "file_loc": taskdef.file_loc,
                    "file": taskdef.file or taskdef.remote_file,
                    "main_script_name": taskdef.main_script_name,
                    "params": params or taskdef.params,
                    "executor": taskdef.executor,
                    "exe_user": exe_user,
                    "iphost": iphost,
                    "create_dt": timezone.now(),
                    "task_status": 2,
                }
                m_subtask = models.SubTask(**subtask)
                m_subtask.task = task
                m_subtask.save()

            newurl = reverse_lazy("jobtask:task-detail",
                                  kwargs={
                                      'pk': task.id,
                                      "taskid": taskid
                                  })
            data = {
                "taskid": taskid,
                "msg": "success",
                "code": 0,
                "url": newurl
            }  ## 必填}
            return JsonResponse(data)
        except Exception:
            import traceback
            tb = traceback.format_exc()
            print tb
            data = {"taskid": "", "msg": tb, "code": 1}
            return JsonResponse(data)
Ejemplo n.º 23
0
    def run(self, sid):
        try:
            conf = self.get_backup_conf(sid)
            if not conf: return False
            srcfiles = conf.get("srcfiles", "")
            destdir = conf.get("destdir", "")
            excludes = conf.get("excludes", "")
            zip_flag = conf.get("zip", "")
            keep = conf.get("keep", "")
            timeout = int(conf.get("timeout", 0))

            srcfiles = srcfiles.strip()
            destdir = destdir.strip()

            if srcfiles == "" or destdir == "":
                msg = u"srcfiles:{0} or destdir:{1} is empty.".format(
                    srcfiles, destdir)
                print msg
                self._logger.warn(msg)
                return False

            file_ln = re.split("[,|;|\s]+", srcfiles)
            if not file_ln:
                return False

            auto_destdir = os.path.join(destdir, sdate().datetime_ex())

            if not os.path.exists(destdir):
                os.makedirs(destdir)
                os.makedirs(auto_destdir)

            for (idx, f) in enumerate(file_ln):
                f = unicode(f.strip(), "utf-8")
                if not f: continue
                if not os.path.exists(f):
                    msg = u"File Not Exist. File: {0}".format(f)
                    print msg
                    self._logger.warn(msg)
                    continue

                cmdstr = self.oh(f, auto_destdir, excludes)
                print u"[FILE-{0}]".format(idx + 1)
                print u"  FROM: {0}".format(f)
                print u"    TO: {0}".format(auto_destdir)
                print u"  KEEP: {0}".format(keep)
                print u"   ZIP: {0}".format(zip_flag)
                #print u"CMDSTR: {0}".format(cmdstr)
                if sys.platform == 'win32':  ## 解决中文路径引起的错误
                    cmdstr = cmdstr.encode("gbk")

                command = cmds(cmdstr, timeout=timeout)
                (stdo, stde, retcode) = (command.stdo(), command.stde(),
                                         command.code())

                logdict = {
                    "cmdstr": get_right_content(cmdstr),
                    "stdo": stdo,
                    "stde": stde,
                    "retcode": retcode,
                }
                self._logger.dictlog(level="info", **logdict)

                if retcode == 0:
                    print(u"=> backup result: SUCCESS")
                    if zip_flag.strip() == "1":
                        directory = os.path.join(auto_destdir,
                                                 f.split(os.path.sep)[-1])
                        tarflag = self.tar_gz(directory)
                        if tarflag == True:
                            print(u"=> tar result: SUCCESS")
                            self.delete(directory)
                        else:
                            print(u"=> tar result: SUCCESS")
                else:
                    print(u"=> backup result: FAILURE")

            ## sort dir desc by ctime
            dirs = self.sort_file(destdir)
            keep = int(str(keep).strip())
            if keep <= 0: return
            ## delete old version
            del_dirs = dirs[keep - 1:]
            for d in del_dirs:
                del_path = os.path.join(destdir, d)
                self.delete(del_path)
                print u"=> Delete: {0}".format(del_path)

        except:
            tb = traceback.format_exc()
            self._logger.error(tb)