1.2.運維平臺之工單工作流

背景:

        以前需求方產生需求,需要找相關人員溝通,溝通後需要郵箱通知,還會詢問郵件格式怎麼寫,

        (有些需求可能會使用gitlab存放,讓相關人員按格式抄送,反正大家都煩悶,效率奇低).


需求:

        0.日常運維工作表單流程化歸類,具備審覈執行回滾分派功能,便於前期協調處理和後期統計分析.

        1.流程和任務結構實現,能夠增刪改查等操作.

        2.分用戶顯示,實現待處理、已處理、我發起等列表

        3.工單狀態化,支持"提交->審覈->執行->結束",加入回滾工單的效果,相關分派和郵件觸發報警(重點).

        4.流程工單內容需求不同,導致表單字段動態生成,根據狀態禁止某些字段只讀.


益處:    

        開發需要創建機器資源,通過表單填寫即可,運維執行通過,直接對接到ucloud api接口直接創建.(提高自動化水平)

        工單需求信息知會,需求是否已經產生,當前狀態步驟.

        量化運維工作內容,通過統計分析歸類,提高工作效率非常有幫助(最近處理事務,如何更好提高效率).


後期開發方向:

        一鍵接單, 未處理工單爲Open, 通過設置一鍵接單, 可以顯示用戶正在處理, 處理需要時間較長工單.

        監控告警以工單形式發出,讓運維人員以工單工作流方式處理.

        進行日常工作分析歸類,需要完成大量工單測試數據.


大衆點評公司樣例, 歸類大多數日常工作. 

workflow_11.png


###########################################################################################
###########################################################################################
##-----------------------------------------------------------------------------------------
#workflow模塊關係圖(models相關模塊說明)

##-----------------------------------------------------------------------------------------


workflow_12.png


##-----------------------------------------------------------------------------------------
#工單創建過程和狀態化說明

##-----------------------------------------------------------------------------------------

通過頁面直接創建某個工單任務.

workflow_1.png


獲取相關流程描述,不同流程步驟不一致.

workflow_2.png


工單任務創建, 注意此部分由固定字段和動態字段組成. 注意下面的'提交'和'保存'操作, 通向不同Step.

workflow_3.png


分用戶顯示, 待處理工單key爲undone, 再傳遞userid和訂單狀態,獲取需要操作的工單.

if key == "undone/":

        qset = (Q(order_people=u1)&Q(step__in=Step.objects.exclude(tag="end")))

workflow_6.png


實現部分字段只讀狀態, 只允許修改部分字段.

workflow_7.png


前面處理步驟爲'VM虛擬機創建_vmcreate-approval', 此處爲'VM虛擬機創建_vmcreate-exec', 工單狀態化.

workflow_6.png


流程步驟說明

workflow_8.png


流程流轉步驟說明:

workflow_9.png


##-----------------------------------------------------------------------------------------
#動態定義表單說明:

##-----------------------------------------------------------------------------------------

存放相關流程動態定義字段和默認設置.

workflow_10.png

用戶創建任務時,通過使用以下代碼進行組裝處理.

#通過傳入流程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項目.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章