Skip to content

Commit 3d705db

Browse files
committed
[Bugfix] 修复一些bug
1 parent 22b7b84 commit 3d705db

6 files changed

Lines changed: 61 additions & 42 deletions

File tree

apps/assets/forms.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,16 @@ def save(self, commit=True):
224224
password = self.cleaned_data.get('password', None)
225225
private_key_file = self.cleaned_data.get('private_key_file')
226226
auto_generate_key = self.cleaned_data.get('auto_generate_key')
227+
private_key = None
228+
public_key = None
227229

228230
if auto_generate_key:
229231
logger.info('Auto set system user auth')
230232
system_user.auto_gen_auth()
231233
else:
232-
private_key = private_key_file.read().strip().decode('utf-8')
233-
public_key = ssh_pubkey_gen(private_key=private_key)
234+
if private_key_file:
235+
private_key = private_key_file.read().strip().decode('utf-8')
236+
public_key = ssh_pubkey_gen(private_key=private_key)
234237
system_user.set_auth(password=password, private_key=private_key, public_key=public_key)
235238
return system_user
236239

apps/assets/templates/assets/user_asset_list.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<th class="text-center">{% trans 'Hardware' %}</th>
3535
<th class="text-center">{% trans 'Active' %}</th>
3636
<th class="text-center">{% trans 'Connective' %}</th>
37+
<th class="text-center">{% trans 'Action' %}</th>
3738
</tr>
3839
</thead>
3940
<tbody>
@@ -70,12 +71,18 @@
7071
} else {
7172
$(td).html('<i class="fa fa-circle text-navy"></i>')
7273
}
74+
}},
75+
{targets: 9, createdCell: function (td, cellData, rowData) {
76+
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);
77+
$(td).html(conn_btn)
7378
}}
7479
],
7580
ajax_url: '{% url "api-assets:asset-list" %}',
76-
columns: [{data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "port" },
81+
columns: [
82+
{data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "port" },
7783
{data: "get_type_display" }, {data: "get_env_display"}, {data: "hardware_info"},
78-
{data: "is_active" }, {data: "is_connective"}],
84+
{data: "is_active" }, {data: "is_connective"}, {data: "id"}
85+
],
7986
op_html: $('#actions').html()
8087
};
8188
return jumpserver.initDataTable(options);

apps/terminal/urls/views_urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/connect/$', views.TerminalConnectView.as_view(), name='terminal-connect'),
1616
url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', views.TerminalUpdateView.as_view(), name='terminal-update'),
1717
url(r'^(?P<pk>[0-9a-zA-Z\-]{36})/accept/$', views.TerminalAcceptView.as_view(), name='terminal-accept'),
18+
url(r'^web-terminal/$', views.WebTerminalView.as_view(), name='web-terminal'),
1819

1920
# Session view
2021
url(r'^session-online/$', views.SessionOnlineListView.as_view(), name='session-online-list'),

apps/terminal/utils.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ def get_session_system_user_list():
1818
return set(list(Session.objects.values_list('system_user', flat=True)))
1919

2020

21-
22-
2321
def get_user_list_from_cache():
2422
return cache.get(USERS_CACHE_KEY)
2523

apps/terminal/views/terminal.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# ~*~ coding: utf-8 ~*~
22
#
3-
43
from django.views.generic import ListView, UpdateView, DeleteView, \
5-
DetailView, TemplateView
4+
DetailView, View
65
from django.contrib.auth.mixins import LoginRequiredMixin
76
from django.utils.translation import ugettext as _
7+
from django.shortcuts import redirect
88
from django.urls import reverse_lazy, reverse
99

1010
from common.mixins import JSONResponseMixin
@@ -16,6 +16,7 @@
1616
__all__ = [
1717
"TerminalListView", "TerminalUpdateView", "TerminalDetailView",
1818
"TerminalDeleteView", "TerminalConnectView", "TerminalAcceptView",
19+
"WebTerminalView",
1920
]
2021

2122

@@ -115,3 +116,8 @@ def get_context_data(self, **kwargs):
115116

116117
kwargs.update(context)
117118
return super(TerminalConnectView, self).get_context_data(**kwargs)
119+
120+
121+
class WebTerminalView(LoginRequiredMixin, View):
122+
def get(self, request, *args, **kwargs):
123+
return redirect('/luna/?' + request.GET.urlencode())

run_server.py

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import time
77
import argparse
88
import platform
9+
import sys
910

1011
from apps import __version__
1112

@@ -27,6 +28,7 @@
2728
EXIT_MSGS = []
2829

2930

31+
3032
try:
3133
os.makedirs(os.path.join(BASE_DIR, "data", "static"))
3234
os.makedirs(os.path.join(BASE_DIR, "data", "media"))
@@ -54,9 +56,8 @@ def start_gunicorn():
5456
cmd = "gunicorn jumpserver.wsgi -b {}:{} -w {}".format(HTTP_HOST, HTTP_PORT, WORKERS)
5557
if DEBUG:
5658
cmd += " --reload"
57-
subprocess.call(cmd, shell=True)
58-
EXIT_MSGS.append("Gunicorn start failed")
59-
EXIT_EVENT.set()
59+
p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
60+
return p
6061

6162

6263
def start_celery():
@@ -68,16 +69,15 @@ def start_celery():
6869
if platform.platform().startswith("Linux"):
6970
cmd = """
7071
id jumpserver || useradd -s /sbin/nologin jumpserver;
71-
su jumpserver -c 'celery -A common worker -l {}'
72+
su jumpserver -c 'celery -A common worker -l {}';
7273
""".format(LOG_LEVEL.lower())
7374
else:
7475
cmd = """
75-
export C_FORCE_ROOT=1;celery -A common worker -l {}'
76+
export C_FORCE_ROOT=1;celery -A common worker -l {}
7677
""".format(LOG_LEVEL.lower())
7778

78-
subprocess.call(cmd, shell=True)
79-
EXIT_MSGS.append("Celery start failed")
80-
EXIT_EVENT.set()
79+
p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
80+
return p
8181

8282

8383
def start_beat():
@@ -86,40 +86,44 @@ def start_beat():
8686
os.environ.setdefault('PYTHONOPTIMIZE', '1')
8787
os.environ.setdefault('C_FORCE_ROOT', '1')
8888
scheduler = "django_celery_beat.schedulers:DatabaseScheduler"
89-
cmd = 'celery -A common beat -l {} --scheduler {} --max-interval 5 '.format(LOG_LEVEL, scheduler)
90-
subprocess.call(cmd, shell=True)
91-
EXIT_MSGS.append("Beat start failed")
92-
EXIT_EVENT.set()
89+
cmd = 'celery -A common beat -l {} --scheduler {} --max-interval 60 '.format(LOG_LEVEL, scheduler)
90+
p = subprocess.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr)
91+
return p
9392

9493

9594
def start_service(services):
96-
make_migrations()
97-
9895
print(time.ctime())
9996
print('Jumpserver version {}, more see https://www.jumpserver.org'.format(
10097
__version__))
10198
print('Quit the server with CONTROL-C.')
10299

103-
threads = []
104-
if 'gunicorn' in args.services:
105-
threads.append(threading.Thread(target=start_gunicorn, args=()))
106-
if 'celery' in args.services:
107-
threads.append(threading.Thread(target=start_celery, args=()))
108-
if 'beat' in args.services:
109-
threads.append(threading.Thread(target=start_beat, args=()))
110-
if 'all' in args.services:
111-
_threads = []
112-
for func in (start_gunicorn, start_celery, start_beat):
113-
t = threading.Thread(target=func, args=())
114-
_threads.append(t)
115-
threads = _threads
116-
117-
for t in threads:
118-
t.start()
119-
120-
if EXIT_EVENT.wait():
121-
print("\n\n" + "####" * 30)
122-
print("\n".join(EXIT_MSGS))
100+
processes = {}
101+
services_all = {
102+
"gunicorn": start_gunicorn,
103+
"celery": start_celery,
104+
"beat": start_beat
105+
}
106+
107+
if 'all' in services:
108+
for name, func in services_all.items():
109+
processes[name] = func()
110+
else:
111+
for name in services:
112+
func = services_all.get(name)
113+
processes[name] = func()
114+
115+
stop_event = threading.Event()
116+
while not stop_event.is_set():
117+
for name, proc in processes.items():
118+
if proc.poll() is not None:
119+
print("\n\n" + "####"*10 + " ERROR OCCUR " + "####"*10)
120+
print("Start service {} [FAILED]".format(name))
121+
for _, p in processes.items():
122+
p.terminate()
123+
stop_event.set()
124+
print("Exited".format(name))
125+
break
126+
time.sleep(5)
123127

124128

125129
if __name__ == '__main__':

0 commit comments

Comments
 (0)