-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathkkitadmin.py
More file actions
175 lines (126 loc) · 5.46 KB
/
Copy pathkkitadmin.py
File metadata and controls
175 lines (126 loc) · 5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
from kkitadmin.sites import site
from kkitadmin.admin_base import BaseKkitAdmin
from django import forms
from MaintainWeb import models
enabled_admins = {} #不要动,所有注册的表都会自动添加到这里
class UserCreationForm(forms.ModelForm):
"""A form for creating new users. Includes all the required
fields, plus a repeated password."""
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta:
model = models.UserProfile
fields = ('email','name')
def clean_password2(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
if len(password1) < 6:
raise forms.ValidationError("Passwords takes at least 6 letters")
return password2
def save(self, commit=True):
# Save the provided password in hashed format
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class UserAdmin(BaseKkitAdmin):
model = models.UserProfile
add_form = UserCreationForm
list_display = ('id','name','email','is_admin')
filter_horizontal = ('host_groups','bind_hosts')
readonly_fields = ['password']
change_page_onclick_fields = {
'password':['password_change_form','重置密码']
}
search_fields = ['email','name']
list_filter = ['is_admin']
class HostAdmin(BaseKkitAdmin):
model = models.Hosts
list_display = ('id','hostname','ip_addr','port','idc','system_type','enabled','created_at','is_group')
list_per_page = 50
fk_fields = ['idc',]
readonly_fields = ['ip_addr',]
search_fields = ['ip_addr','hostname','idc__name','is_group']
list_filter = ['ip_addr','idc']
class BindHostAdmin(BaseKkitAdmin):
model = models.BindHosts
list_display = ('id','host','host_user')
fk_fields = ['host','host_user']
class HostGroupAdmin(BaseKkitAdmin):
model = models.HostGroups
list_display = ('name','memo','bind_hosts')
filter_horizontal = ('bind_hosts',)
class AuditLogAdmin(BaseKkitAdmin):
model = models.AuditLog
list_display = ('id','session','user','host','action_type','cmd','date')
list_filter = ('session','user','host','action_type','date')
search_fields = ['user__user__username','host__host__hostname','host__host__ip_addr','cmd']
list_per_page =10
choice_fields = ('action_type',)
fk_fields = ('user','host')
readable_table = True
class HostUsersAdmin(BaseKkitAdmin):
model = models.HostUsers
list_display = ['auth_method','username','password']
class IDCAdmin(BaseKkitAdmin):
model = models.IDC
list_display = ('id','name')
class SessionAdmin(BaseKkitAdmin):
model = models.Session
list_display = ['id','user', 'bind_host','stay_time','cmd_count','date','closed']
fk_fields = ['user','bind_host']
list_filter = ['user','bind_host','date','closed']
onclick_fields = {
'id': 'session_record'
}
readable_table = True
class TaskLogAdmin(BaseKkitAdmin):
model = models.TaskLog
list_display = ['id','start_time','end_time','task_type','user','cmd','host_nums','success_nums','failed_nums','log_details']
list_filter = ['user','task_type','start_time']
fk_fields = ['user']
readable_table = True
def log_details(self):
'''日志详情'''
ele = '''<a class='btn-link' href='/configure/web_tasklogdetail/?child_of_task=%s'>详情</a> ''' % self.instance.id
return ele
def host_nums(self):
'''主机数量'''
#print("customize field enroll",self.instance.hosts.select_related())
return '''%s ''' % (self.instance.hosts.select_related().count())
host_nums.display_name = "主机数量"
def success_nums(self):
return "%s" % self.instance.tasklogdetail_set.select_related().filter(result='success').count()
success_nums.display_name = "成功数"
def failed_nums(self):
return "%s" % self.instance.tasklogdetail_set.select_related().filter(result='failed').count()
failed_nums.display_name = '失败数'
readable_table = True
class TaskLogDetailAdmin(BaseKkitAdmin):
model = models.TaskLogDetail
list_display = ('child_of_task','bind_host','pretty_event_log','result','date','note')
fk_fields = ('bind_host')
choice_fields = ('result')
list_filter = ('child_of_task','result','date')
readable_table = True
def pretty_event_log(self):
return "<pre>%s</pre>" % self.instance.event_log
pretty_event_log.display_name = "任务结果"
from django_celery_beat import models as beat_models
site.register(beat_models.IntervalSchedule)
site.register(beat_models.PeriodicTask)
site.register(beat_models.CrontabSchedule)
site.register(models.UserProfile,UserAdmin)
site.register(models.Hosts,HostAdmin)
site.register(models.HostGroups,HostGroupAdmin)
#site.register(models.AuditLog,AuditLogAdmin)
site.register(models.HostUsers,HostUsersAdmin)
site.register(models.Session,SessionAdmin)
site.register(models.BindHosts,BindHostAdmin)
site.register(models.TaskLog,TaskLogAdmin)
site.register(models.TaskLogDetail,TaskLogDetailAdmin)
site.register(models.IDC,IDCAdmin)