Commit 3d705dbe authored by ibuler's avatar ibuler

[Bugfix] 修复一些bug

parent 22b7b84a
...@@ -224,11 +224,14 @@ class SystemUserForm(forms.ModelForm): ...@@ -224,11 +224,14 @@ class SystemUserForm(forms.ModelForm):
password = self.cleaned_data.get('password', None) password = self.cleaned_data.get('password', None)
private_key_file = self.cleaned_data.get('private_key_file') private_key_file = self.cleaned_data.get('private_key_file')
auto_generate_key = self.cleaned_data.get('auto_generate_key') auto_generate_key = self.cleaned_data.get('auto_generate_key')
private_key = None
public_key = None
if auto_generate_key: if auto_generate_key:
logger.info('Auto set system user auth') logger.info('Auto set system user auth')
system_user.auto_gen_auth() system_user.auto_gen_auth()
else: else:
if private_key_file:
private_key = private_key_file.read().strip().decode('utf-8') private_key = private_key_file.read().strip().decode('utf-8')
public_key = ssh_pubkey_gen(private_key=private_key) public_key = ssh_pubkey_gen(private_key=private_key)
system_user.set_auth(password=password, private_key=private_key, public_key=public_key) system_user.set_auth(password=password, private_key=private_key, public_key=public_key)
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
<th class="text-center">{% trans 'Hardware' %}</th> <th class="text-center">{% trans 'Hardware' %}</th>
<th class="text-center">{% trans 'Active' %}</th> <th class="text-center">{% trans 'Active' %}</th>
<th class="text-center">{% trans 'Connective' %}</th> <th class="text-center">{% trans 'Connective' %}</th>
<th class="text-center">{% trans 'Action' %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
...@@ -70,12 +71,18 @@ function initTable() { ...@@ -70,12 +71,18 @@ function initTable() {
} else { } else {
$(td).html('<i class="fa fa-circle text-navy"></i>') $(td).html('<i class="fa fa-circle text-navy"></i>')
} }
}},
{targets: 9, createdCell: function (td, cellData, rowData) {
var conn_btn = '<a href="{% url "terminal:web-terminal" %}?id={{ DEFAULT_PK }}" class="btn btn-xs btn-info">{% trans "Connect" %}</a>'.replace("{{ DEFAULT_PK }}", cellData);
$(td).html(conn_btn)
}} }}
], ],
ajax_url: '{% url "api-assets:asset-list" %}', ajax_url: '{% url "api-assets:asset-list" %}',
columns: [{data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "port" }, columns: [
{data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "port" },
{data: "get_type_display" }, {data: "get_env_display"}, {data: "hardware_info"}, {data: "get_type_display" }, {data: "get_env_display"}, {data: "hardware_info"},
{data: "is_active" }, {data: "is_connective"}], {data: "is_active" }, {data: "is_connective"}, {data: "id"}
],
op_html: $('#actions').html() op_html: $('#actions').html()
}; };
return jumpserver.initDataTable(options); return jumpserver.initDataTable(options);
......
...@@ -15,6 +15,7 @@ urlpatterns = [ ...@@ -15,6 +15,7 @@ urlpatterns = [
url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/connect/$', views.TerminalConnectView.as_view(), name='terminal-connect'), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/connect/$', views.TerminalConnectView.as_view(), name='terminal-connect'),
url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', views.TerminalUpdateView.as_view(), name='terminal-update'), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', views.TerminalUpdateView.as_view(), name='terminal-update'),
url(r'^(?P<pk>[0-9a-zA-Z\-]{36})/accept/$', views.TerminalAcceptView.as_view(), name='terminal-accept'), url(r'^(?P<pk>[0-9a-zA-Z\-]{36})/accept/$', views.TerminalAcceptView.as_view(), name='terminal-accept'),
url(r'^web-terminal/$', views.WebTerminalView.as_view(), name='web-terminal'),
# Session view # Session view
url(r'^session-online/$', views.SessionOnlineListView.as_view(), name='session-online-list'), url(r'^session-online/$', views.SessionOnlineListView.as_view(), name='session-online-list'),
......
...@@ -18,8 +18,6 @@ def get_session_system_user_list(): ...@@ -18,8 +18,6 @@ def get_session_system_user_list():
return set(list(Session.objects.values_list('system_user', flat=True))) return set(list(Session.objects.values_list('system_user', flat=True)))
def get_user_list_from_cache(): def get_user_list_from_cache():
return cache.get(USERS_CACHE_KEY) return cache.get(USERS_CACHE_KEY)
......
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
# #
from django.views.generic import ListView, UpdateView, DeleteView, \ from django.views.generic import ListView, UpdateView, DeleteView, \
DetailView, TemplateView DetailView, View
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.shortcuts import redirect
from django.urls import reverse_lazy, reverse from django.urls import reverse_lazy, reverse
from common.mixins import JSONResponseMixin from common.mixins import JSONResponseMixin
...@@ -16,6 +16,7 @@ from ..hands import AdminUserRequiredMixin ...@@ -16,6 +16,7 @@ from ..hands import AdminUserRequiredMixin
__all__ = [ __all__ = [
"TerminalListView", "TerminalUpdateView", "TerminalDetailView", "TerminalListView", "TerminalUpdateView", "TerminalDetailView",
"TerminalDeleteView", "TerminalConnectView", "TerminalAcceptView", "TerminalDeleteView", "TerminalConnectView", "TerminalAcceptView",
"WebTerminalView",
] ]
...@@ -115,3 +116,8 @@ class TerminalConnectView(LoginRequiredMixin, DetailView): ...@@ -115,3 +116,8 @@ class TerminalConnectView(LoginRequiredMixin, DetailView):
kwargs.update(context) kwargs.update(context)
return super(TerminalConnectView, self).get_context_data(**kwargs) return super(TerminalConnectView, self).get_context_data(**kwargs)
class WebTerminalView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
return redirect('/luna/?' + request.GET.urlencode())
...@@ -6,6 +6,7 @@ import threading ...@@ -6,6 +6,7 @@ import threading
import time import time
import argparse import argparse
import platform import platform
import sys
from apps import __version__ from apps import __version__
...@@ -27,6 +28,7 @@ EXIT_EVENT = threading.Event() ...@@ -27,6 +28,7 @@ EXIT_EVENT = threading.Event()
EXIT_MSGS = [] EXIT_MSGS = []
try: try:
os.makedirs(os.path.join(BASE_DIR, "data", "static")) os.makedirs(os.path.join(BASE_DIR, "data", "static"))
os.makedirs(os.path.join(BASE_DIR, "data", "media")) os.makedirs(os.path.join(BASE_DIR, "data", "media"))
...@@ -54,9 +56,8 @@ def start_gunicorn(): ...@@ -54,9 +56,8 @@ def start_gunicorn():
cmd = "gunicorn jumpserver.wsgi -b {}:{} -w {}".format(HTTP_HOST, HTTP_PORT, WORKERS) cmd = "gunicorn jumpserver.wsgi -b {}:{} -w {}".format(HTTP_HOST, HTTP_PORT, WORKERS)
if DEBUG: if DEBUG:
cmd += " --reload" cmd += " --reload"
subprocess.call(cmd, shell=True) p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
EXIT_MSGS.append("Gunicorn start failed") return p
EXIT_EVENT.set()
def start_celery(): def start_celery():
...@@ -68,16 +69,15 @@ def start_celery(): ...@@ -68,16 +69,15 @@ def start_celery():
if platform.platform().startswith("Linux"): if platform.platform().startswith("Linux"):
cmd = """ cmd = """
id jumpserver || useradd -s /sbin/nologin jumpserver; id jumpserver || useradd -s /sbin/nologin jumpserver;
su jumpserver -c 'celery -A common worker -l {}' su jumpserver -c 'celery -A common worker -l {}';
""".format(LOG_LEVEL.lower()) """.format(LOG_LEVEL.lower())
else: else:
cmd = """ cmd = """
export C_FORCE_ROOT=1;celery -A common worker -l {}' export C_FORCE_ROOT=1;celery -A common worker -l {}
""".format(LOG_LEVEL.lower()) """.format(LOG_LEVEL.lower())
subprocess.call(cmd, shell=True) p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
EXIT_MSGS.append("Celery start failed") return p
EXIT_EVENT.set()
def start_beat(): def start_beat():
...@@ -86,40 +86,44 @@ def start_beat(): ...@@ -86,40 +86,44 @@ def start_beat():
os.environ.setdefault('PYTHONOPTIMIZE', '1') os.environ.setdefault('PYTHONOPTIMIZE', '1')
os.environ.setdefault('C_FORCE_ROOT', '1') os.environ.setdefault('C_FORCE_ROOT', '1')
scheduler = "django_celery_beat.schedulers:DatabaseScheduler" scheduler = "django_celery_beat.schedulers:DatabaseScheduler"
cmd = 'celery -A common beat -l {} --scheduler {} --max-interval 5 '.format(LOG_LEVEL, scheduler) cmd = 'celery -A common beat -l {} --scheduler {} --max-interval 60 '.format(LOG_LEVEL, scheduler)
subprocess.call(cmd, shell=True) p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
EXIT_MSGS.append("Beat start failed") return p
EXIT_EVENT.set()
def start_service(services): def start_service(services):
make_migrations()
print(time.ctime()) print(time.ctime())
print('Jumpserver version {}, more see https://www.jumpserver.org'.format( print('Jumpserver version {}, more see https://www.jumpserver.org'.format(
__version__)) __version__))
print('Quit the server with CONTROL-C.') print('Quit the server with CONTROL-C.')
threads = [] processes = {}
if 'gunicorn' in args.services: services_all = {
threads.append(threading.Thread(target=start_gunicorn, args=())) "gunicorn": start_gunicorn,
if 'celery' in args.services: "celery": start_celery,
threads.append(threading.Thread(target=start_celery, args=())) "beat": start_beat
if 'beat' in args.services: }
threads.append(threading.Thread(target=start_beat, args=()))
if 'all' in args.services: if 'all' in services:
_threads = [] for name, func in services_all.items():
for func in (start_gunicorn, start_celery, start_beat): processes[name] = func()
t = threading.Thread(target=func, args=()) else:
_threads.append(t) for name in services:
threads = _threads func = services_all.get(name)
processes[name] = func()
for t in threads:
t.start() stop_event = threading.Event()
while not stop_event.is_set():
if EXIT_EVENT.wait(): for name, proc in processes.items():
print("\n\n" + "####" * 30) if proc.poll() is not None:
print("\n".join(EXIT_MSGS)) print("\n\n" + "####"*10 + " ERROR OCCUR " + "####"*10)
print("Start service {} [FAILED]".format(name))
for _, p in processes.items():
p.terminate()
stop_event.set()
print("Exited".format(name))
break
time.sleep(5)
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment