2.运维平台之工单工作流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.运维平台之工单工作流相关的知识,希望对你有一定的参考价值。
背景:
以前需求方产生需求,需要找相关人员沟通,沟通后需要邮箱通知,还会询问邮件格式怎么写,
(有些需求可能会使用gitlab存放,让相关人员按格式抄送,反正大家都烦闷,效率奇低).
需求:
0.日常运维工作表单流程化归类,具备审核执行回滚分派功能,便于前期协调处理和后期统计分析.
1.流程和任务结构实现,能够增删改查等操作.
2.分用户显示,实现待处理、已处理、我发起等列表
3.工单状态化,支持"提交->审核->执行->结束",加入回滚工单的效果,相关分派和邮件触发报警(重点).
4.流程工单内容需求不同,导致表单字段动态生成,根据状态禁止某些字段只读.
益处:
开发需要创建机器资源,通过表单填写即可,运维执行通过,直接对接到ucloud api接口直接创建.(提高自动化水平)
工单需求信息知会,需求是否已经产生,当前状态步骤.
量化运维工作内容,通过统计分析归类,提高工作效率非常有帮助(最近处理事务,如何更好提高效率).
后期开发方向:
一键接单, 未处理工单为Open, 通过设置一键接单, 可以显示用户正在处理, 处理需要时间较长工单.
监控告警以工单形式发出,让运维人员以工单工作流方式处理.
进行日常工作分析归类,需要完成大量工单测试数据.
大众点评公司样例, 归类大多数日常工作.
###########################################################################################
###########################################################################################
##-----------------------------------------------------------------------------------------
#workflow模块关系图(models相关模块说明)
##-----------------------------------------------------------------------------------------
##-----------------------------------------------------------------------------------------
#工单创建过程和状态化说明
##-----------------------------------------------------------------------------------------
通过页面直接创建某个工单任务.
获取相关流程描述,不同流程步骤不一致.
工单任务创建, 注意此部分由固定字段和动态字段组成. 注意下面的'提交'和'保存'操作, 通向不同Step.
分用户显示, 待处理工单key为undone, 再传递userid和订单状态,获取需要操作的工单.
if key == "undone/":
qset = (Q(order_people=u1)&Q(step__in=Step.objects.exclude(tag="end")))
实现部分字段只读状态, 只允许修改部分字段.
前面处理步骤为'VM虚拟机创建_vmcreate-approval', 此处为'VM虚拟机创建_vmcreate-exec', 工单状态化.
流程步骤说明
流程流转步骤说明:
##-----------------------------------------------------------------------------------------
#动态定义表单说明:
##-----------------------------------------------------------------------------------------
存放相关流程动态定义字段和默认设置.
用户创建任务时,通过使用以下代码进行组装处理.
#通过传入流程ID进行内容组装(process固定字段+parameter变动字段) def getParameterForm(id): pobj = Process.SearchOne(int(id)) form = CreateOrderForm(initial={"process":id,"step":pobj.begin}) if pobj: palameterlist = pobj.parameter_process.select_related().order_by("sorting") if len(palameterlist) == 0: print "不需要进行封装处理" for item in palameterlist: form.fields['parameter-'+str(item.id)] = forms.ChoiceField(label=item.title,widget=forms.Select(),choices=(eval(item.optional_item)),initial=item.initial_value,required=True,) return form
#In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited? #links https://stackoverflow.com/questions/324477/in-a-django-form-how-do-i-make-a-field-readonly-or-disabled-so-that-it-cannot #使用以下共用表单模块. class ReadOnlyFieldsMixin(object): readonly_fields =() #print "这是最终要处理的字段", readonly_fields def __init__(self, *args, **kwargs): super(ReadOnlyFieldsMixin, self).__init__(*args, **kwargs) for field in (field for name, field in self.fields.iteritems() if name in self.readonly_fields): field.widget.attrs['disabled'] = 'true' field.required = False def clean(self): cleaned_data = super(ReadOnlyFieldsMixin,self).clean() for field in self.readonly_fields: cleaned_data[field] = getattr(self.instance, field) return cleaned_data #Usage, just define which ones must be read only: #调用处理方法. #class MyFormWithReadOnlyFields(ReadOnlyFieldsMixin, CreateOrderForm): # readonly_fields = ("name","desc","process","step","expire_time")
技术链接:
loonapp先生的<利用django实现工作流>
数据来源于http://www.loonapp.com/blog/27/和https://github.com/bbaobelief/workflow
当然是直接抄他的构思, 以此为基础进行二次开发.
糯米糊糊先生的<Django:我是怎么做到使用django动态定义表单(form)>
数据来源于http://blog.csdn.net/huyoo/article/details/6627967(),
此动态表单技术暂时用于workflow项目.
以上是关于2.运维平台之工单工作流的主要内容,如果未能解决你的问题,请参考以下文章