mirror of https://github.com/jumpserver/jumpserver
Merge branches 'master' and 'wangyong' of gitcafe.com:ibuler/jumpserver
commit
3c1af0e266
|
@ -3,24 +3,24 @@ from django.conf.urls import patterns, include, url
|
|||
from jasset.views import *
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^host_add/$', add_host),
|
||||
url(r"^host_add_multi/$", add_host_multi),
|
||||
url(r'^host_list/$', list_host),
|
||||
url(r'^host_add/$', host_add),
|
||||
url(r"^host_add_multi/$", host_add_batch),
|
||||
url(r'^host_list/$', host_list),
|
||||
url(r'^search/$', host_search),
|
||||
url(r"^(\d+.\d+.\d+.\d+)/$", jlist_ip),
|
||||
url(r'^idc_add/$', add_idc),
|
||||
url(r'^idc_list/$', list_idc),
|
||||
url(r'^idc_edit/$', edit_idc),
|
||||
url(r'^idc_detail/$', detail_idc),
|
||||
url(r'^idc_del/(\w+)/$', del_idc),
|
||||
url(r'^group_add/$', add_group),
|
||||
url(r'^group_edit/$', edit_group),
|
||||
url(r'^group_list/$', list_group),
|
||||
url(r'^group_detail/$', detail_group),
|
||||
url(r"^host_detail/$", host_detail),
|
||||
url(r'^idc_add/$', idc_add),
|
||||
url(r'^idc_list/$', idc_list),
|
||||
url(r'^idc_edit/$', idc_edit),
|
||||
url(r'^idc_detail/$', idc_detail),
|
||||
url(r'^idc_del/$', idc_del),
|
||||
url(r'^group_add/$', group_add),
|
||||
url(r'^group_edit/$', group_edit),
|
||||
url(r'^group_list/$', group_list),
|
||||
url(r'^group_detail/$', group_detail),
|
||||
url(r'^group_del_host/(\w+)/$', group_del_host),
|
||||
url(r'^group_del/(\w+)/$', group_del),
|
||||
url(r'^host_del/(\w+)/$', host_del),
|
||||
url(r'^host_edit/$', host_edit),
|
||||
url(r'^host_edit/batch/$', batch_host_edit),
|
||||
url(r'^host_edit_common/batch/$', batch_host_edit_common),
|
||||
url(r'^host_edit/batch/$', host_edit_batch),
|
||||
url(r'^host_edit_common/batch/$', host_edit_common_batch),
|
||||
)
|
|
@ -17,11 +17,10 @@ class RaiseError(Exception):
|
|||
pass
|
||||
|
||||
|
||||
def f_add_host(ip, port, idc, jtype, group, dept, active, comment, username='', password=''):
|
||||
def f_host_add(ip, port, idc, jtype, group, dept, active, comment, username='', password=''):
|
||||
groups, depts = [], []
|
||||
idc = IDC.objects.get(name=idc)
|
||||
if jtype == 'M':
|
||||
print username, password
|
||||
a = Asset(ip=ip, port=port,
|
||||
login_type=jtype, idc=idc,
|
||||
is_active=int(active),
|
||||
|
@ -50,14 +49,13 @@ def f_add_host(ip, port, idc, jtype, group, dept, active, comment, username='',
|
|||
a.save()
|
||||
|
||||
|
||||
def jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user='', j_password=''):
|
||||
def f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user='', j_password=''):
|
||||
groups, depts = [], []
|
||||
is_active = {u'是': '1', u'否': '2'}
|
||||
login_types = {'LDAP': 'L', 'MAP': 'M'}
|
||||
for group in j_group[0].split():
|
||||
c = BisGroup.objects.get(name=group.strip())
|
||||
groups.append(c)
|
||||
print j_dept
|
||||
for d in j_dept[0].split():
|
||||
p = DEPT.objects.get(name=d.strip())
|
||||
depts.append(p)
|
||||
|
@ -88,7 +86,7 @@ def jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_activ
|
|||
|
||||
|
||||
@require_admin
|
||||
def add_host(request):
|
||||
def host_add(request):
|
||||
login_types = {'L': 'LDAP', 'M': 'MAP'}
|
||||
header_title, path1, path2 = u'添加主机', u'资产管理', u'添加主机'
|
||||
eidc = IDC.objects.exclude(name='ALL')
|
||||
|
@ -123,16 +121,16 @@ def add_host(request):
|
|||
if j_type == 'M':
|
||||
j_user = request.POST.get('j_user')
|
||||
j_password = cryptor.encrypt(request.POST.get('j_password'))
|
||||
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
|
||||
f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
|
||||
else:
|
||||
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
|
||||
f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
|
||||
smg = u'主机 %s 添加成功' % j_ip
|
||||
|
||||
return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_admin
|
||||
def add_host_multi(request):
|
||||
def host_add_batch(request):
|
||||
header_title, path1, path2 = u'批量添加主机', u'资产管理', u'批量添加主机'
|
||||
login_types = {'LDAP': 'L', 'MAP': 'M'}
|
||||
dept_id = get_user_dept(request)
|
||||
|
@ -154,9 +152,9 @@ def add_host_multi(request):
|
|||
if j_type == 'M':
|
||||
j_user = request.POST.get('j_user')
|
||||
j_password = cryptor.encrypt(request.POST.get('j_password'))
|
||||
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
|
||||
f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
|
||||
else:
|
||||
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
|
||||
f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
|
||||
|
||||
smg = u'批量添加添加成功'
|
||||
return HttpResponseRedirect('/jasset/host_list/')
|
||||
|
@ -165,7 +163,7 @@ def add_host_multi(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def batch_host_edit(request):
|
||||
def host_edit_batch(request):
|
||||
if request.method == 'POST':
|
||||
len_table = request.POST.get('len_table')
|
||||
for i in range(int(len_table)):
|
||||
|
@ -182,7 +180,7 @@ def batch_host_edit(request):
|
|||
j_id = request.POST.get(j_id).strip()
|
||||
j_ip = request.POST.get(j_ip).strip()
|
||||
j_port = request.POST.get(j_port).strip()
|
||||
j_dept = request.POST.getlist(j_dept).strip()
|
||||
j_dept = request.POST.getlist(j_dept)
|
||||
j_idc = request.POST.get(j_idc).strip()
|
||||
j_type = request.POST.get(j_type).strip()
|
||||
j_group = request.POST.getlist(j_group)
|
||||
|
@ -195,16 +193,15 @@ def batch_host_edit(request):
|
|||
j_user = request.POST.get(j_user).strip()
|
||||
password = request.POST.get(j_password).strip()
|
||||
j_password = cryptor.encrypt(password)
|
||||
jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user,
|
||||
j_password)
|
||||
f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
|
||||
else:
|
||||
jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment)
|
||||
f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment)
|
||||
|
||||
return render_to_response('jasset/host_list.html')
|
||||
|
||||
|
||||
@require_login
|
||||
def batch_host_edit_common(request):
|
||||
def host_edit_common_batch(request):
|
||||
user_id = request.session.get('user_id', '')
|
||||
u = User.objects.get(id=user_id)
|
||||
if request.method == 'POST':
|
||||
|
@ -226,7 +223,7 @@ def batch_host_edit_common(request):
|
|||
|
||||
|
||||
@require_login
|
||||
def list_host(request):
|
||||
def host_list(request):
|
||||
header_title, path1, path2 = u'查看主机', u'资产管理', u'查看主机'
|
||||
login_types = {'L': 'LDAP', 'M': 'MAP'}
|
||||
keyword = request.GET.get('keyword', '')
|
||||
|
@ -298,9 +295,7 @@ def host_del(request, offset):
|
|||
for i in range(int(len_list)):
|
||||
key = "id_list[" + str(i) + "]"
|
||||
jid = request.POST.get(key)
|
||||
print jid
|
||||
if is_group_admin(request) and not validate(request, asset=[jid]):
|
||||
emg = u'删除失败,您无权操作!'
|
||||
return HttpResponseRedirect('/jasset/host_list/')
|
||||
a = Asset.objects.get(id=jid).ip
|
||||
Asset.objects.filter(id=jid).delete()
|
||||
|
@ -308,7 +303,6 @@ def host_del(request, offset):
|
|||
else:
|
||||
jid = int(offset)
|
||||
if is_group_admin(request) and not validate(request, asset=[jid]):
|
||||
emg = u'删除失败,您无权操作!'
|
||||
return HttpResponseRedirect('/jasset/host_list/')
|
||||
a = Asset.objects.get(id=jid).ip
|
||||
BisGroup.objects.filter(name=a).delete()
|
||||
|
@ -323,7 +317,7 @@ def host_edit(request):
|
|||
header_title, path1, path2 = u'修改主机', u'资产管理', u'修改主机'
|
||||
groups, e_group, e_dept, depts = [], [], [], []
|
||||
eidc = IDC.objects.all()
|
||||
egroup = BisGroup.objects.all()
|
||||
egroup = BisGroup.objects.exclude(name='ALL')
|
||||
edept = DEPT.objects.all()
|
||||
offset = request.GET.get('id')
|
||||
for g in Asset.objects.get(id=int(offset)).bis_group.all():
|
||||
|
@ -382,23 +376,26 @@ def host_edit(request):
|
|||
a.dept = depts
|
||||
a.save()
|
||||
smg = u'主机 %s 修改成功' % j_ip
|
||||
return HttpResponseRedirect('/jasset/host_list')
|
||||
return HttpResponseRedirect('/jasset/host_detail/?id=%s' % offset)
|
||||
|
||||
return render_to_response('jasset/host_edit.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_login
|
||||
def jlist_ip(request, offset):
|
||||
def host_detail(request):
|
||||
header_title, path1, path2 = u'主机详细信息', u'资产管理', u'主机详情'
|
||||
host_id = int(request.GET.get('id'))
|
||||
post = Asset.objects.get(id=host_id)
|
||||
host_ip = post.ip
|
||||
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
|
||||
post = contact_list = Asset.objects.get(ip=str(offset))
|
||||
log = Log.objects.filter(host=str(offset))
|
||||
user_permed_list = asset_perm_api(Asset.objects.get(ip=str(offset)))
|
||||
return render_to_response('jasset/jlist_ip.html', locals(), context_instance=RequestContext(request))
|
||||
log_all = Log.objects.filter(host=host_ip)
|
||||
log, log_more = log_all[:10], log_all[10:]
|
||||
user_permed_list = asset_perm_api(post)
|
||||
return render_to_response('jasset/host_detail.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_super_user
|
||||
def add_idc(request):
|
||||
def idc_add(request):
|
||||
header_title, path1, path2 = u'添加IDC', u'资产管理', u'添加IDC'
|
||||
if request.method == 'POST':
|
||||
j_idc = request.POST.get('j_idc')
|
||||
|
@ -414,8 +411,10 @@ def add_idc(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def list_idc(request):
|
||||
def idc_list(request):
|
||||
header_title, path1, path2 = u'查看IDC', u'资产管理', u'查看IDC'
|
||||
dept_id = get_user_dept(request)
|
||||
dept = DEPT.objects.get(id=dept_id)
|
||||
keyword = request.GET.get('keyword', '')
|
||||
if keyword:
|
||||
posts = IDC.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword))
|
||||
|
@ -426,7 +425,7 @@ def list_idc(request):
|
|||
|
||||
|
||||
@require_super_user
|
||||
def edit_idc(request):
|
||||
def idc_edit(request):
|
||||
header_title, path1, path2 = u'编辑IDC', u'资产管理', u'编辑IDC'
|
||||
edit = 1
|
||||
idc_id = request.GET.get('id')
|
||||
|
@ -455,7 +454,7 @@ def edit_idc(request):
|
|||
|
||||
|
||||
@require_super_user
|
||||
def del_idc(request, offset):
|
||||
def idc_del(request, offset):
|
||||
if offset == 'multi':
|
||||
len_list = request.POST.get("len_list")
|
||||
for i in range(int(len_list)):
|
||||
|
@ -469,7 +468,7 @@ def del_idc(request, offset):
|
|||
|
||||
|
||||
@require_admin
|
||||
def add_group(request):
|
||||
def group_add(request):
|
||||
header_title, path1, path2 = u'添加主机组', u'资产管理', u'添加主机组'
|
||||
if is_super_user(request):
|
||||
posts = Asset.objects.all()
|
||||
|
@ -505,7 +504,7 @@ def add_group(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def list_group(request):
|
||||
def group_list(request):
|
||||
header_title, path1, path2 = u'查看主机组', u'资产管理', u'查看主机组'
|
||||
dept_id = get_user_dept(request)
|
||||
dept = DEPT.objects.get(id=dept_id)
|
||||
|
@ -544,7 +543,7 @@ def list_group(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def edit_group(request):
|
||||
def group_edit(request):
|
||||
header_title, path1, path2 = u'编辑主机组', u'资产管理', u'编辑主机组'
|
||||
group_id = request.GET.get('id')
|
||||
group = BisGroup.objects.get(id=group_id)
|
||||
|
@ -578,7 +577,7 @@ def edit_group(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def detail_group(request):
|
||||
def group_detail(request):
|
||||
header_title, path1, path2 = u'主机组详情', u'资产管理', u'主机组详情'
|
||||
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
|
||||
dept_id = get_user_dept(request)
|
||||
|
@ -597,7 +596,7 @@ def detail_group(request):
|
|||
|
||||
|
||||
@require_admin
|
||||
def detail_idc(request):
|
||||
def idc_detail(request):
|
||||
header_title, path1, path2 = u'IDC详情', u'资产管理', u'IDC详情'
|
||||
login_types = {'L': 'LDAP', 'M': 'MAP'}
|
||||
idc_id = request.GET.get('id')
|
||||
|
@ -647,7 +646,7 @@ def group_del(request, offset):
|
|||
else:
|
||||
gid = int(offset)
|
||||
BisGroup.objects.filter(id=gid).delete()
|
||||
return HttpResponseRedirect('/jasset/jgroup_list/')
|
||||
return HttpResponseRedirect('/jasset/group_list/')
|
||||
|
||||
|
||||
@require_login
|
||||
|
@ -672,7 +671,6 @@ def host_search(request):
|
|||
Q(bis_group__name__contains=keyword) | Q(comment__contains=keyword)) \
|
||||
.distinct().order_by('ip')
|
||||
posts = list(set(post_all) & set(post_perm))
|
||||
print posts
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
return render_to_response('jasset/host_search.html', locals(), context_instance=RequestContext(request))
|
|
@ -3,9 +3,8 @@ from django.conf.urls import patterns, include, url
|
|||
from jlog.views import *
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', log_list_online),
|
||||
url(r'^log_list/online/$', log_list_online),
|
||||
url(r'^log_list/offline/$', log_list_offline),
|
||||
url(r'^$', log_list),
|
||||
url(r'^log_list/(\w+)/$', log_list),
|
||||
url(r'^log_kill/(\d+)', log_kill),
|
||||
url(r'^history/$', log_history),
|
||||
url(r'^search/$', log_search),
|
||||
|
|
129
jlog/views.py
129
jlog/views.py
|
@ -13,82 +13,54 @@ from connect import BASE_DIR
|
|||
from jlog.models import Log
|
||||
from jumpserver.views import pages
|
||||
from juser.models import User, DEPT
|
||||
from jumpserver.api import get_user_dept, is_super_user, is_group_admin, is_common_user
|
||||
from jumpserver.api import get_user_dept, is_super_user, is_group_admin, is_common_user, require_admin, require_login
|
||||
|
||||
CONF = ConfigParser.ConfigParser()
|
||||
CONF.read('%s/jumpserver.conf' % BASE_DIR)
|
||||
|
||||
|
||||
def log_list_online(request):
|
||||
def get_user_log(request, keyword, env, username, dept_name):
|
||||
if is_super_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=env).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=env).order_by('-start_time')
|
||||
|
||||
elif is_group_admin(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time')
|
||||
|
||||
elif is_common_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\
|
||||
.filter(is_finished=env).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=env).filter(user=username).order_by('-start_time')
|
||||
return posts
|
||||
|
||||
|
||||
@require_login
|
||||
def log_list(request, offset):
|
||||
header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户'
|
||||
keyword = request.GET.get('keyword')
|
||||
web_socket_host = CONF.get('websocket', 'web_socket_host')
|
||||
env_dic = {'online': 0, 'offline': 1}
|
||||
env = env_dic[offset]
|
||||
keyword = request.GET.get('keyword')
|
||||
dept_id = get_user_dept(request)
|
||||
dept_name = DEPT.objects.get(id=dept_id).name
|
||||
user_id = request.session.get('user_id')
|
||||
username = User.objects.get(id=user_id).username
|
||||
posts = get_user_log(request, keyword, env, username, dept_name)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
if is_super_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=0).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=0).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_group_admin(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_common_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\
|
||||
.filter(is_finished=0).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=0).filter(user=username).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
return render_to_response('jlog/log_online.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def log_list_offline(request):
|
||||
header_title, path1, path2 = u'查看日志', u'查看日志', u'历史记录'
|
||||
keyword = request.GET.get('keyword')
|
||||
web_socket_host = CONF.get('websocket', 'web_socket_host')
|
||||
dept_id = get_user_dept(request)
|
||||
dept_name = DEPT.objects.get(id=dept_id).name
|
||||
user_id = request.session.get('user_id')
|
||||
username = User.objects.get(id=user_id).username
|
||||
if is_super_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=1).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=1).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_group_admin(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_common_user(request):
|
||||
if keyword:
|
||||
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\
|
||||
.filter(is_finished=1).order_by('-start_time')
|
||||
else:
|
||||
posts = Log.objects.filter(is_finished=1).filter(user=username).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
|
||||
return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_admin
|
||||
def log_kill(request, offset):
|
||||
pid = offset
|
||||
if pid:
|
||||
|
@ -97,6 +69,7 @@ def log_kill(request, offset):
|
|||
return HttpResponseRedirect('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_login
|
||||
def log_history(request):
|
||||
if request.method == 'GET':
|
||||
id = request.GET.get('id', 0)
|
||||
|
@ -109,37 +82,17 @@ def log_history(request):
|
|||
return HttpResponse(content)
|
||||
|
||||
|
||||
@require_login
|
||||
def log_search(request):
|
||||
keyword = request.GET.get('keyword')
|
||||
env = request.GET.get('env')
|
||||
offset = request.GET.get('env')
|
||||
dept_id = get_user_dept(request)
|
||||
dept_name = DEPT.objects.get(id=dept_id).name
|
||||
user_id = request.session.get('user_id')
|
||||
username = User.objects.get(id=user_id).username
|
||||
if is_super_user(request):
|
||||
if env == 'online':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=0).order_by('-start_time')
|
||||
elif env == 'offline':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=1).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_group_admin(request):
|
||||
if env == 'online':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time')
|
||||
elif env == 'offline':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_common_user(request):
|
||||
if env == 'online':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=0).filter(user=username).order_by('-start_time')
|
||||
elif env == 'offline':
|
||||
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
|
||||
.filter(is_finished=1).filter(user=username).order_by('-start_time')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
env_dic = {'online': 0, 'offline': 1}
|
||||
env = env_dic[offset]
|
||||
posts = get_user_log(request, keyword, env, username, dept_name)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jlog/log_search.html', locals(), context_instance=RequestContext(request))
|
||||
|
|
|
@ -45,7 +45,7 @@ class Apply(models.Model):
|
|||
asset = models.CharField(max_length=500)
|
||||
comment = models.TextField(blank=True, null=True)
|
||||
status = models.IntegerField(max_length=2)
|
||||
date_add = models.DateTimeField(default=datetime.datetime.now(), null=True)
|
||||
date_add = models.DateTimeField(null=True)
|
||||
date_end = models.DateTimeField(null=True)
|
||||
|
||||
def __unicode__(self):
|
||||
|
|
|
@ -28,5 +28,6 @@ urlpatterns = patterns('jperm.views',
|
|||
(r'^apply_show/(\w+)/$', 'perm_apply_log'),
|
||||
(r'^apply_exec/$', 'perm_apply_exec'),
|
||||
(r'^apply_info/$', 'perm_apply_info'),
|
||||
(r'^apply_del/$', 'perm_apply_del'),
|
||||
(r'^apply_search/$', 'perm_apply_search'),
|
||||
)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
# coding: utf-8
|
||||
|
||||
import sys
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('utf8')
|
||||
|
||||
|
||||
from django.core.mail import send_mail
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
|
@ -13,6 +11,12 @@ from django.db.models import Q
|
|||
from jumpserver.api import *
|
||||
|
||||
|
||||
CONF = ConfigParser()
|
||||
CONF.read('%s/jumpserver.conf' % BASE_DIR)
|
||||
send_ip = CONF.get('base', 'ip')
|
||||
send_port = CONF.get('base', 'port')
|
||||
|
||||
|
||||
def asset_cmd_groups_get(asset_groups_select='', cmd_groups_select=''):
|
||||
asset_groups_select_list = []
|
||||
cmd_groups_select_list = []
|
||||
|
@ -653,9 +657,9 @@ def perm_apply(request):
|
|||
group_lis = ', '.join(group)
|
||||
hosts_lis = ', '.join(hosts)
|
||||
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, asset=hosts, status=0, comment=comment)
|
||||
uuid = Apply.objects.get(applyer=applyer, asset=hosts, comment=comment).uuid
|
||||
url = "http://127.0.0.1:8000/jperm/apply_exec/?uuid=%s" % uuid
|
||||
a = Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, date_add=datetime.datetime.now(), asset=hosts, status=0, comment=comment)
|
||||
uuid = a.uuid
|
||||
url = "http://%s:%s/jperm/apply_exec/?uuid=%s" % (send_ip, send_port, uuid)
|
||||
mail_msg = """
|
||||
Hi,%s:
|
||||
有新的权限申请, 详情如下:
|
||||
|
@ -664,12 +668,12 @@ def perm_apply(request):
|
|||
申请的主机: %s
|
||||
申请时间: %s
|
||||
申请说明: %s
|
||||
请及时审批, 审批完成后点击以下链接,告知申请人。
|
||||
请及时审批, 审批完成后, 点击以下链接或登录授权管理-权限审批页面点击确认键,告知申请人。
|
||||
|
||||
%s
|
||||
""" % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url)
|
||||
|
||||
send_mail(mail_title, mail_msg, 'jumpserver@163.com', [mail_address], fail_silently=False)
|
||||
send_mail(mail_title, mail_msg, 'jkfunshion@fun.tv', [mail_address], fail_silently=False)
|
||||
smg = "提交成功,已发邮件通知部门管理员。"
|
||||
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
|
||||
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
|
||||
|
@ -679,6 +683,8 @@ def perm_apply(request):
|
|||
def perm_apply_exec(request):
|
||||
header_title, path1, path2 = u'主机权限申请', u'权限管理', u'审批完成'
|
||||
uuid = request.GET.get('uuid')
|
||||
user_id = request.session.get('user_id')
|
||||
approver = User.objects.get(id=user_id).name
|
||||
if uuid:
|
||||
p_apply = Apply.objects.filter(uuid=str(uuid))
|
||||
q_apply = Apply.objects.get(uuid=str(uuid))
|
||||
|
@ -689,7 +695,7 @@ def perm_apply_exec(request):
|
|||
user = User.objects.get(username=q_apply.applyer)
|
||||
mail_address = user.email
|
||||
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
p_apply.update(status=1, date_end=time_now)
|
||||
p_apply.update(status=1, approver=approver, date_end=time_now)
|
||||
mail_title = '%s - 权限审批完成' % q_apply.applyer
|
||||
mail_msg = """
|
||||
Hi,%s:
|
||||
|
@ -699,7 +705,7 @@ def perm_apply_exec(request):
|
|||
smg = '授权完成, 已邮件通知申请人, 十秒钟后返回首页'
|
||||
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
|
||||
else:
|
||||
smg = '没有此授权, 十秒钟后返回首页'
|
||||
smg = '没有此授权记录, 十秒钟后返回首页'
|
||||
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
|
@ -735,56 +741,41 @@ def perm_apply_log(request, offset):
|
|||
dept_name = DEPT.objects.get(id=dept_id).name
|
||||
user_id = request.session.get('user_id')
|
||||
username = User.objects.get(id=user_id).username
|
||||
if offset == 'online':
|
||||
posts = get_apply_posts(request, 0, username, dept_name, keyword)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jperm/perm_log_online.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
elif offset == 'offline':
|
||||
posts = get_apply_posts(request, 1, username, dept_name, keyword)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jperm/perm_log_offline.html', locals(), context_instance=RequestContext(request))
|
||||
status_dic = {'online': 0, 'offline': 1}
|
||||
status = status_dic[offset]
|
||||
posts = get_apply_posts(request, status, username, dept_name, keyword)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jperm/perm_log_%s.html' % offset, locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_login
|
||||
def perm_apply_info(request):
|
||||
uuid = request.GET.get('uuid')
|
||||
post = Apply.objects.get(uuid=uuid)
|
||||
return render_to_response('jperm/perm_apply_info.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@require_admin
|
||||
def perm_apply_del(request):
|
||||
uuid = request.GET.get('uuid')
|
||||
u_apply = Apply.objects.filter(uuid=uuid)
|
||||
if u_apply:
|
||||
u_apply.delete()
|
||||
return HttpResponseRedirect('/jperm/apply_show/online/')
|
||||
|
||||
|
||||
@require_login
|
||||
def perm_apply_search(request):
|
||||
keyword = request.GET.get('keyword')
|
||||
env = request.GET.get('env')
|
||||
offset = request.GET.get('env')
|
||||
dept_id = get_user_dept(request)
|
||||
dept_name = DEPT.objects.get(id=dept_id).name
|
||||
user_id = request.session.get('user_id')
|
||||
username = User.objects.get(id=user_id).username
|
||||
if is_super_user(request):
|
||||
if env == 'online':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=0).order_by('-date_add')
|
||||
elif env == 'offline':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=1).order_by('-date_add')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_group_admin(request):
|
||||
if env == 'online':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=0).filter(dept_name=dept_name).order_by('-date_add')
|
||||
elif env == 'offline':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=1).filter(dept_name=dept_name).order_by('-date_add')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
|
||||
elif is_common_user(request):
|
||||
if env == 'online':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=0).filter(user=username).order_by('-date_add')
|
||||
elif env == 'offline':
|
||||
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
|
||||
.filter(status=1).filter(applyer=username).order_by('-date_add')
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
status_dic = {'online': 0, 'offline': 1}
|
||||
status = status_dic[offset]
|
||||
posts = get_apply_posts(request, status, username, dept_name, keyword)
|
||||
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
|
||||
return render_to_response('jperm/perm_apply_search.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
#coding: utf8
|
||||
|
||||
[base]
|
||||
ip = 192.168.173.129
|
||||
port = 80
|
||||
|
||||
|
||||
[db]
|
||||
host = 127.0.0.1
|
||||
port = 3306
|
||||
|
@ -7,6 +12,7 @@ user = jumpserver
|
|||
password = mysql234
|
||||
database = jumpserver
|
||||
|
||||
|
||||
[ldap]
|
||||
ldap_enable = 1
|
||||
host_url = ldap://127.0.0.1:389
|
||||
|
@ -14,15 +20,18 @@ base_dn = dc=jumpserver, dc=org
|
|||
root_dn = cn=admin,dc=jumpserver,dc=org
|
||||
root_pw = secret234
|
||||
|
||||
|
||||
[websocket]
|
||||
web_socket_host = 127.0.0.1:3000
|
||||
web_socket_host = 192.168.173.129:3000
|
||||
|
||||
|
||||
[web]
|
||||
key = 88aaaf7ffe3c6c04
|
||||
|
||||
|
||||
[mail]
|
||||
email_host = 'mail.funshion.com'
|
||||
email_port = '25'
|
||||
email_host_user = 'jkfunshion'
|
||||
email_host_password = 'jkmail%'
|
||||
email_host = mail.funshion.com
|
||||
email_port = 25
|
||||
email_host_user = jkfunshion
|
||||
email_host_password = jkmail%
|
||||
email_use_tls = False
|
||||
|
|
|
@ -300,9 +300,10 @@ def user_perm_asset_api(username):
|
|||
asset_group_list = user_perm_group_api(user)
|
||||
for asset_group in asset_group_list:
|
||||
asset_list.extend(asset_group.asset_set.all())
|
||||
|
||||
asset_list = list(set(asset_list))
|
||||
return asset_list
|
||||
return []
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
def asset_perm_api(asset):
|
||||
|
@ -319,6 +320,7 @@ def asset_perm_api(asset):
|
|||
user_permed_list = []
|
||||
for user_group in user_group_list:
|
||||
user_permed_list.extend(user_group.user_set.all())
|
||||
user_permed_list = list(set(user_permed_list))
|
||||
return user_permed_list
|
||||
|
||||
|
||||
|
|
|
@ -9,16 +9,22 @@ def name_proc(request):
|
|||
if role_id == 2:
|
||||
user_total_num = User.objects.all().count()
|
||||
user_active_num = User.objects.filter().count()
|
||||
host_total_num = Asset.objects.all().count()
|
||||
host_active_num = Asset.objects.filter(is_active=True).count()
|
||||
else:
|
||||
user, dept = get_session_user_dept(request)
|
||||
user_total_num = dept.user_set.all().count()
|
||||
user_active_num = dept.user_set.filter(is_active=True).count()
|
||||
|
||||
host_total_num = Asset.objects.all().count()
|
||||
host_active_num = Asset.objects.filter(is_active=True).count()
|
||||
host_total_num = dept.asset_set.all().count()
|
||||
host_active_num = dept.asset_set.all().filter(is_active=True).count()
|
||||
request.session.set_expiry(3600)
|
||||
|
||||
return {'session_user_id': user_id, 'session_role_id': role_id,
|
||||
'user_total_num': user_total_num, 'user_active_num': user_active_num,
|
||||
'host_total_num': host_total_num, 'host_active_num': host_active_num}
|
||||
info_dic = {'session_user_id': user_id,
|
||||
'session_role_id': role_id,
|
||||
'user_total_num': user_total_num,
|
||||
'user_active_num': user_active_num,
|
||||
'host_total_num': host_total_num,
|
||||
'host_active_num': host_active_num}
|
||||
|
||||
return info_dic
|
||||
|
||||
|
|
|
@ -24,11 +24,11 @@ DB_PASSWORD = config.get('db', 'password')
|
|||
DB_DATABASE = config.get('db', 'database')
|
||||
|
||||
# mail config
|
||||
EMAIL_HOST = 'mail.funshion.com'
|
||||
EMAIL_PORT = '25'
|
||||
EMAIL_HOST_USER = 'jkfunshion'
|
||||
EMAIL_HOST_PASSWORD = 'jkmail%'
|
||||
EMAIL_USE_TLS = False
|
||||
EMAIL_HOST = config.get('mail', 'email_host')
|
||||
EMAIL_PORT = config.get('mail', 'email_port')
|
||||
EMAIL_HOST_USER = config.get('mail', 'email_host_user')
|
||||
EMAIL_HOST_PASSWORD = config.get('mail', 'email_host_password')
|
||||
EMAIL_USE_TLS = config.getboolean('mail', 'email_use_tls')
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
||||
|
|
|
@ -200,6 +200,18 @@ def ast_to_list(lis):
|
|||
return restr
|
||||
|
||||
|
||||
@register.filter(name='get_group_count')
|
||||
def get_group_count(post, dept):
|
||||
count = post.asset_set.filter(dept=dept).count()
|
||||
return count
|
||||
|
||||
|
||||
@register.filter(name='get_idc_count')
|
||||
def get_idc_count(post, dept):
|
||||
count = post.asset_set.filter(dept=dept).count()
|
||||
return count
|
||||
|
||||
|
||||
@register.filter(name='ast_to_list_1')
|
||||
def ast_to_list_1(lis):
|
||||
return ast.literal_eval(lis)
|
||||
|
|
|
@ -107,6 +107,7 @@ def admin_index(request):
|
|||
|
||||
# latest 10 login
|
||||
login_10 = Log.objects.order_by('-start_time')[:10]
|
||||
login_more_10 = Log.objects.order_by('-start_time')[10:21]
|
||||
|
||||
# a week top 10
|
||||
for user_info in user_top_ten:
|
||||
|
@ -146,10 +147,16 @@ def index(request):
|
|||
active_hosts = Asset.objects.filter(is_active=1)
|
||||
|
||||
# percent of dashboard
|
||||
percent_user = format(active_users.count() / users.count(), '.0%')
|
||||
percent_host = format(active_hosts.count() / hosts.count(), '.0%')
|
||||
percent_online_user = format(online_user.count() / users.count(), '.0%')
|
||||
percent_online_host = format(online_host.count() / hosts.count(), '.0%')
|
||||
if users.count() == 0:
|
||||
percent_user, percent_online_user = '0%', '0%'
|
||||
else:
|
||||
percent_user = format(active_users.count() / users.count(), '.0%')
|
||||
percent_online_user = format(online_user.count() / users.count(), '.0%')
|
||||
if hosts.count() == 0:
|
||||
percent_host, percent_online_host = '0%', '0%'
|
||||
else:
|
||||
percent_host = format(active_hosts.count() / hosts.count(), '.0%')
|
||||
percent_online_host = format(online_host.count() / hosts.count(), '.0%')
|
||||
|
||||
li_date, li_str = getDaysByNum(7)
|
||||
today = datetime.datetime.now().day
|
||||
|
@ -168,6 +175,7 @@ def index(request):
|
|||
|
||||
# perm apply latest 10
|
||||
perm_apply_10 = Apply.objects.order_by('-date_add')[:10]
|
||||
login_more_10 = Log.objects.order_by('-start_time')[10:20]
|
||||
|
||||
# latest 10 login
|
||||
login_10 = Log.objects.order_by('-start_time')[:10]
|
||||
|
|
|
@ -89,6 +89,10 @@
|
|||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user"></ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
|
@ -153,7 +157,29 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> 更多 </button>
|
||||
<button id="show" class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> 更多 </button>
|
||||
<div id='more' style="display: none">
|
||||
<br/>
|
||||
<div class="feed-activity-list">
|
||||
{% for login in login_more_10 %}
|
||||
<div class="feed-element">
|
||||
<a href="profile.html" class="pull-left">
|
||||
<img alt="image" class="img-circle" src="/static/img/root.png">
|
||||
</a>
|
||||
<div class="media-body ">
|
||||
{% ifequal login.is_finished 0 %}
|
||||
<small class="pull-right text-navy">{{ login.start_time|naturaltime }}</small>
|
||||
{% else %}
|
||||
<small class="pull-right">{{ login.start_time|naturaltime }}</small>
|
||||
{% endifequal %}
|
||||
<strong>{{ login.user }}</strong> 登录了{{ login.host }} <br>
|
||||
<small class="text-muted">{{ login.start_time }}</small>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -172,12 +198,7 @@
|
|||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
<li><a href="#">Config option 1</a>
|
||||
</li>
|
||||
<li><a href="#">Config option 2</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="dropdown-menu dropdown-user"></ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
|
@ -218,6 +239,12 @@
|
|||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#show').click(function(){
|
||||
$('#show').css('display', 'none');
|
||||
$('#more').css('display', 'block');
|
||||
})
|
||||
})
|
||||
var cate = {{ li_str|safe }};
|
||||
$(function () {
|
||||
$('#top10').highcharts({
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load mytags %}
|
||||
{% block content %}
|
||||
{% include 'nav_cat_bar.html' %}
|
||||
|
||||
|
@ -40,12 +41,16 @@
|
|||
<td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td>
|
||||
<td class="text-center"> {{ post.name }} </td>
|
||||
<td class="text-center"> {{ post.dept.name }} </td>
|
||||
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
|
||||
{% else %}
|
||||
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post|get_group_count:dept }}</a> </td>
|
||||
{% endifequal %}
|
||||
<td class="text-center"> {{ post.comment }} </td>
|
||||
<td class="text-center">
|
||||
<a href="/jasset/group_detail/?id={{ post.id }}" class="btn btn-xs btn-info">详情</a>
|
||||
<a href="/jasset/group_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a href="/jasset/group_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
|
||||
<a href="/jasset/group_del/{{ post.id }}/" class="btn btn-xs btn-danger">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
|
|
@ -0,0 +1,212 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load mytags %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
{% include 'nav_cat_bar.html' %}
|
||||
<div class="wrapper wrapper-content animated fadeInRight">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<span class="text text-primary"><b>{{ post.ip }}</b></span>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
</ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content ibox-heading">
|
||||
<h3>主机详细信息</h3>
|
||||
<small><i class="fa fa-map-marker"></i> 此主机详细信息.</small>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div>
|
||||
<div class="text-left">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td class="text-navy">IP</td>
|
||||
<td>{{ post.ip }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">端口</td>
|
||||
<td>{{ post.port }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">登录方式</td>
|
||||
<td>{{ login_types|get_item:post.login_type }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">IDC</td>
|
||||
<td>{{ post.idc.name }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">部门</td>
|
||||
<td>
|
||||
<table class="table">
|
||||
{% for dept in post.dept.all %}
|
||||
<tr>
|
||||
<td>{{ dept.name }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">主机组</td>
|
||||
<td>
|
||||
<table class="table">
|
||||
{% for group in post.bis_group.all %}
|
||||
<tr>
|
||||
<td>{{ group.name }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">激活</td>
|
||||
<td>{{ user.is_active|bool2str }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">添加日期</td>
|
||||
<td>{{ post.date_added|date:"Y-m-d H:i:s" }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-navy">备注</td>
|
||||
<td>{{ post.comment }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>拥有权限的用户</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
</ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content ibox-heading">
|
||||
<h3>主机所有授权的用户</h3>
|
||||
<small><i class="fa fa-map-marker"></i> 包含了此主机所有授权的用户.</small>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div>
|
||||
<div class="text-left">
|
||||
<table class="table">
|
||||
{% for user in user_permed_list %}
|
||||
<tr>
|
||||
<td class="text-navy">{{ user.name }}</td>
|
||||
<td>{{ user.dept.name }}</td>
|
||||
<td><a href="/juser/user_detail/?id={{ user.id }}">详情</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>最近一周登录记录</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
</ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content ibox-heading">
|
||||
<h3>最近一周登录记录</h3>
|
||||
<small><i class="fa fa-map-marker"></i> 此主机最近一周用户登录信息.</small>
|
||||
</div>
|
||||
<div class="ibox-content inspinia-timeline">
|
||||
{% for l in log %}
|
||||
<div class="timeline-item">
|
||||
<div class="row">
|
||||
<div class="col-xs-5 date">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
<small class="text-navy">{{ l.user }}</small>
|
||||
<br/>
|
||||
<strong>{{l.dept_name}}</strong>
|
||||
</div>
|
||||
<div class="col-xs-7 content no-top-border">
|
||||
<p class="m-b-xs"><strong>详细信息</strong></p>
|
||||
<p>来源IP: {{ l.remote_ip }}</p>
|
||||
<p>开始: {{ l.start_time |date:"Y-m-d H:i:s" }}</p>
|
||||
<p>结束: {{ l.end_time |date:"Y-m-d H:i:s" }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button id="show" class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> 所有 </button>
|
||||
<div id='more' style="display: none">
|
||||
<br/>
|
||||
{% for l in log_more %}
|
||||
<div class="timeline-item">
|
||||
<div class="row">
|
||||
<div class="col-xs-5 date">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
<small class="text-navy">{{ l.user }}</small>
|
||||
<br/>
|
||||
<strong>{{l.dept_name}}</strong>
|
||||
</div>
|
||||
<div class="col-xs-7 content no-top-border">
|
||||
<p class="m-b-xs"><strong>详细信息</strong></p>
|
||||
<p>来源IP: {{ l.remote_ip }}</p>
|
||||
<p>开始: {{ l.start_time |date:"Y-m-d H:i:s" }}</p>
|
||||
<p>结束: {{ l.end_time |date:"Y-m-d H:i:s" }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#show').click(function(){
|
||||
$('#show').css('display', 'none');
|
||||
$('#more').css('display', 'block');
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -73,7 +73,7 @@
|
|||
<td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td>
|
||||
<td class="text-center" name="j_comment"> {{ post.comment }} </td>
|
||||
<td class="text-center" data-editable='false'>
|
||||
<a value="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
<a href="/jasset/host_detail/?id={{ post.id }}" class="btn btn-xs btn-primary">详情</a>
|
||||
{% ifnotequal session_role_id 0 %}
|
||||
<a href="/jasset/host_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a href="/jasset/host_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load mytags %}
|
||||
{% block content %}
|
||||
{% include 'nav_cat_bar.html' %}
|
||||
|
||||
|
@ -8,7 +9,9 @@
|
|||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-content">
|
||||
<div class="">
|
||||
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a>
|
||||
{% endifequal %}
|
||||
<form id="search_form" method="get" action="" class="pull-right mail-search">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" id="search_input" name="keyword" placeholder="Search">
|
||||
|
@ -26,7 +29,9 @@
|
|||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center"><input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('contents_form')"></th>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<th class="text-center"><input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('contents_form')"></th>
|
||||
{% endifequal %}
|
||||
<th class="text-center"> 机房名 </th>
|
||||
<th class="text-center"> 主机数量 </th>
|
||||
<th class="text-center"> 备注 </th>
|
||||
|
@ -36,14 +41,22 @@
|
|||
<tbody>
|
||||
{% for post in contacts.object_list %}
|
||||
<tr class="gradeX">
|
||||
<td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td>
|
||||
{% endifequal %}
|
||||
<td class="text-center"> {{ post.name }} </td>
|
||||
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
|
||||
{% else %}
|
||||
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post|get_idc_count:dept }}</a> </td>
|
||||
{% endifequal %}
|
||||
<td class="text-center"> {{ post.comment }} </td>
|
||||
<td class="text-center">
|
||||
<a href="/jasset/idc_detail/?id={{ post.id }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
<a href="/jasset/idc_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a href="/jasset/idc_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
|
||||
{% ifequal session_role_id 2 %}
|
||||
<a href="/jasset/idc_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a href="/jasset/idc_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
|
||||
{% endifequal %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
@ -51,8 +64,10 @@
|
|||
</table>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" />
|
||||
<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />
|
||||
{% ifequal session_role_id 2 %}
|
||||
<input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" />
|
||||
<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />
|
||||
{% endifequal %}
|
||||
</div>
|
||||
{% include 'paginator.html' %}
|
||||
</div>
|
||||
|
|
|
@ -125,8 +125,8 @@
|
|||
var ip = $('#ip')[0].innerText;
|
||||
var start_time = $('#start_time')[0].innerText;
|
||||
var end_time = $('#end_time')[0].innerText;
|
||||
var div_username = ' 登录用户名: '+'<span class="text-info">'+username+'' + '</span>';
|
||||
var div_ip = ' 登录主机: '+'<span class="text-info">' + ip + '</span>';
|
||||
var div_username = ' 用户名: '+'<span class="text-info">'+username+'' + '</span>';
|
||||
var div_ip = ' 主机: '+'<span class="text-info">' + ip + '</span>';
|
||||
var div_time = ' 开始时间: ' + '<span class="text-info">'+start_time +'</span>' + ' 结束时间: ' +'<span class="text-info">' + end_time + '</span'
|
||||
var title = 'JumpServer命令统计 '+ div_username + div_ip + div_time
|
||||
$.ajax({url:url,success:function(data){
|
||||
|
@ -138,16 +138,6 @@
|
|||
SOCKET_HOST: "{{ web_socket_host }}"
|
||||
}
|
||||
|
||||
function cut(num){
|
||||
var g_url = "/jlog/log_kill/"+num;
|
||||
console.log(g_url);
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: g_url,
|
||||
success: window.open("/jlog/","_self")
|
||||
});
|
||||
}
|
||||
|
||||
function log_search(){
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
|
|
|
@ -92,9 +92,9 @@
|
|||
{% for post in contacts.object_list %}
|
||||
<tr class="gradeX">
|
||||
<td id="username" class="text-center"> {{ post.user }} </td>
|
||||
<td id="ip" class="text-center"> {{ post.dept_name }} </td>
|
||||
<td id="deptname" class="text-center"> {{ post.dept_name }} </td>
|
||||
<td id="ip" class="text-center"> {{ post.host }} </td>
|
||||
<td id="ip" class="text-center"> {{ post.remote_ip }} </td>
|
||||
<td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td>
|
||||
{% ifnotequal session_role_id 0 %}
|
||||
<td class="text-center"><a class="monitor" filename="{{ post.log_path }}"> 监控 </a></td>
|
||||
<td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}")' /></td>
|
||||
|
@ -187,7 +187,6 @@
|
|||
|
||||
|
||||
function log_search(){
|
||||
console.log('hell0')
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "/jlog/search/?env=online",
|
||||
|
@ -210,7 +209,7 @@
|
|||
$.ajax({
|
||||
type: "GET",
|
||||
url: g_url,
|
||||
success: window.open("/jlog/","_self")
|
||||
success: window.open("/jlog/log_list/online/","_self")
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
<th class="text-center"> 申请主机 </th>
|
||||
<th class="text-center"> 批准人 </th>
|
||||
<th class="text-center"> 申请时间 </th>
|
||||
<!--<th class="text-center"> 批准时间 </th>-->
|
||||
<th class="text-center"> 备注 </th>
|
||||
<th class="text-center"> 详情 </th>
|
||||
|
||||
|
@ -20,11 +19,10 @@
|
|||
<tr class="gradeX">
|
||||
<td class="text-center" id="username"> {{ post.applyer }} </td>
|
||||
<td class="text-center" id="dept"> {{ post.dept }} </td>
|
||||
<td class="text-center" id="ip"> {% for i in post.bisgroup|ast_to_list %} {{ i }} {% endfor %}... </td>
|
||||
<td class="text-center" id="remote_ip">{% for i in post.asset|ast_to_list %} {{ i }} {% endfor %}... </td>
|
||||
<td class="text-center" id="ip"> {{ post.bisgroup|ast_to_list }} </td>
|
||||
<td class="text-center" id="remote_ip"> {{ post.asset|ast_to_list }} </td>
|
||||
<td class="text-center" id="approver"> {{ post.approver }} </td>
|
||||
<td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td>
|
||||
<!--<td class="text-center" id="end_time"> {{ post.date_end|date:"Y-m-d H:i:s" }} </td>-->
|
||||
<td class="text-center" id=""> {{ post.comment }} </td>
|
||||
<td class="text-center" data-editable='false'>
|
||||
<a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
|
|
|
@ -72,7 +72,11 @@
|
|||
<td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td>
|
||||
<td class="text-center" id=""> {{ post.comment }} </td>
|
||||
<td class="text-center" data-editable='false'>
|
||||
<a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
<a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
{% ifnotequal session_role_id 0 %}
|
||||
<a href="/jperm/apply_exec/?uuid={{ post.uuid }}" class="btn btn-xs btn-info">确认</a>
|
||||
<a href="/jperm/apply_del/?uuid={{ post.uuid }}" class="btn btn-xs btn-danger">删除</a>
|
||||
{% endifnotequal %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
|
||||
<ul class="nav nav-second-level">
|
||||
<li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li>
|
||||
<li class="host_list"><a href="/jasset/host_list/">查看资产  </span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
|
||||
<li class="host_list host_detail"><a href="/jasset/host_list/">查看资产  </span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
|
||||
<li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li>
|
||||
<li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li>
|
||||
<li class="idc_add"><a href="/jasset/idc_add/">添加IDC</a></li>
|
||||
|
@ -97,7 +97,7 @@
|
|||
<a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
|
||||
<ul class="nav nav-second-level">
|
||||
<li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li>
|
||||
<li class="host_list"><a href="/jasset/host_list/">查看资产  </span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
|
||||
<li class="host_list host_detail"><a href="/jasset/host_list/">查看资产  </span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
|
||||
<li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li>
|
||||
<li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li>
|
||||
<li class="idc_list idc_detail"><a href="/jasset/idc_list/">查看IDC</a></li>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-envelope"></i> <span class="label label-warning">16</span>
|
||||
<i class="fa fa-envelope"></i> <span class="label label-warning">{{ message }}</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-messages">
|
||||
<li>
|
||||
|
@ -64,49 +64,6 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-bell"></i> <span class="label label-primary">8</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-alerts">
|
||||
<li>
|
||||
<a href="mailbox.html">
|
||||
<div>
|
||||
<i class="fa fa-envelope fa-fw"></i> You have 16 messages
|
||||
<span class="pull-right text-muted small">4 minutes ago</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="profile.html">
|
||||
<div>
|
||||
<i class="fa fa-twitter fa-fw"></i> 3 New Followers
|
||||
<span class="pull-right text-muted small">12 minutes ago</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a href="grid_options.html">
|
||||
<div>
|
||||
<i class="fa fa-upload fa-fw"></i> Server Rebooted
|
||||
<span class="pull-right text-muted small">4 minutes ago</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<div class="text-center link-block">
|
||||
<a href="notifications.html">
|
||||
<strong>See All Alerts</strong>
|
||||
<i class="fa fa-angle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/logout/">
|
||||
<i class="fa fa-sign-out"></i> Log out
|
||||
|
|
|
@ -0,0 +1,920 @@
|
|||
0 info it worked if it ends with ok
|
||||
1 verbose cli [ '/opt/node/bin/node', '/opt/node/bin/npm', 'install' ]
|
||||
2 info using npm@1.4.28
|
||||
3 info using node@v0.10.33
|
||||
4 warn package.json web-socket@0.0.1 No repository field.
|
||||
5 warn package.json web-socket@0.0.1 No README data
|
||||
6 verbose readDependencies using package.json deps
|
||||
7 verbose install where, deps [ '/mnt/hgfs/jumpserver/websocket',
|
||||
7 verbose install [ 'express', 'socket.io', 'node-tail', 'tail' ] ]
|
||||
8 info preinstall web-socket@0.0.1
|
||||
9 verbose readDependencies using package.json deps
|
||||
10 verbose cache add [ 'express@~4.10.1', null ]
|
||||
11 verbose cache add name=undefined spec="express@~4.10.1" args=["express@~4.10.1",null]
|
||||
12 verbose parsed url { protocol: null,
|
||||
12 verbose parsed url slashes: null,
|
||||
12 verbose parsed url auth: null,
|
||||
12 verbose parsed url host: null,
|
||||
12 verbose parsed url port: null,
|
||||
12 verbose parsed url hostname: null,
|
||||
12 verbose parsed url hash: null,
|
||||
12 verbose parsed url search: null,
|
||||
12 verbose parsed url query: null,
|
||||
12 verbose parsed url pathname: 'express@~4.10.1',
|
||||
12 verbose parsed url path: 'express@~4.10.1',
|
||||
12 verbose parsed url href: 'express@~4.10.1' }
|
||||
13 verbose cache add [ 'socket.io@~1.2.0', null ]
|
||||
14 verbose cache add name=undefined spec="socket.io@~1.2.0" args=["socket.io@~1.2.0",null]
|
||||
15 verbose parsed url { protocol: null,
|
||||
15 verbose parsed url slashes: null,
|
||||
15 verbose parsed url auth: null,
|
||||
15 verbose parsed url host: null,
|
||||
15 verbose parsed url port: null,
|
||||
15 verbose parsed url hostname: null,
|
||||
15 verbose parsed url hash: null,
|
||||
15 verbose parsed url search: null,
|
||||
15 verbose parsed url query: null,
|
||||
15 verbose parsed url pathname: 'socket.io@~1.2.0',
|
||||
15 verbose parsed url path: 'socket.io@~1.2.0',
|
||||
15 verbose parsed url href: 'socket.io@~1.2.0' }
|
||||
16 verbose cache add name="express" spec="~4.10.1" args=["express","~4.10.1"]
|
||||
17 verbose parsed url { protocol: null,
|
||||
17 verbose parsed url slashes: null,
|
||||
17 verbose parsed url auth: null,
|
||||
17 verbose parsed url host: null,
|
||||
17 verbose parsed url port: null,
|
||||
17 verbose parsed url hostname: null,
|
||||
17 verbose parsed url hash: null,
|
||||
17 verbose parsed url search: null,
|
||||
17 verbose parsed url query: null,
|
||||
17 verbose parsed url pathname: '~4.10.1',
|
||||
17 verbose parsed url path: '~4.10.1',
|
||||
17 verbose parsed url href: '~4.10.1' }
|
||||
18 verbose addNamed [ 'express', '~4.10.1' ]
|
||||
19 verbose addNamed [ null, '>=4.10.1-0 <4.11.0-0' ]
|
||||
20 verbose cache add name="socket.io" spec="~1.2.0" args=["socket.io","~1.2.0"]
|
||||
21 verbose parsed url { protocol: null,
|
||||
21 verbose parsed url slashes: null,
|
||||
21 verbose parsed url auth: null,
|
||||
21 verbose parsed url host: null,
|
||||
21 verbose parsed url port: null,
|
||||
21 verbose parsed url hostname: null,
|
||||
21 verbose parsed url hash: null,
|
||||
21 verbose parsed url search: null,
|
||||
21 verbose parsed url query: null,
|
||||
21 verbose parsed url pathname: '~1.2.0',
|
||||
21 verbose parsed url path: '~1.2.0',
|
||||
21 verbose parsed url href: '~1.2.0' }
|
||||
22 verbose addNamed [ 'socket.io', '~1.2.0' ]
|
||||
23 verbose addNamed [ null, '>=1.2.0-0 <1.3.0-0' ]
|
||||
24 verbose cache add [ 'node-tail@0.0.4', null ]
|
||||
25 verbose cache add name=undefined spec="node-tail@0.0.4" args=["node-tail@0.0.4",null]
|
||||
26 verbose parsed url { protocol: null,
|
||||
26 verbose parsed url slashes: null,
|
||||
26 verbose parsed url auth: null,
|
||||
26 verbose parsed url host: null,
|
||||
26 verbose parsed url port: null,
|
||||
26 verbose parsed url hostname: null,
|
||||
26 verbose parsed url hash: null,
|
||||
26 verbose parsed url search: null,
|
||||
26 verbose parsed url query: null,
|
||||
26 verbose parsed url pathname: 'node-tail@0.0.4',
|
||||
26 verbose parsed url path: 'node-tail@0.0.4',
|
||||
26 verbose parsed url href: 'node-tail@0.0.4' }
|
||||
27 verbose cache add [ 'tail@~0.4.0', null ]
|
||||
28 verbose cache add name=undefined spec="tail@~0.4.0" args=["tail@~0.4.0",null]
|
||||
29 verbose parsed url { protocol: null,
|
||||
29 verbose parsed url slashes: null,
|
||||
29 verbose parsed url auth: null,
|
||||
29 verbose parsed url host: null,
|
||||
29 verbose parsed url port: null,
|
||||
29 verbose parsed url hostname: null,
|
||||
29 verbose parsed url hash: null,
|
||||
29 verbose parsed url search: null,
|
||||
29 verbose parsed url query: null,
|
||||
29 verbose parsed url pathname: 'tail@~0.4.0',
|
||||
29 verbose parsed url path: 'tail@~0.4.0',
|
||||
29 verbose parsed url href: 'tail@~0.4.0' }
|
||||
30 verbose cache add name="node-tail" spec="0.0.4" args=["node-tail","0.0.4"]
|
||||
31 verbose parsed url { protocol: null,
|
||||
31 verbose parsed url slashes: null,
|
||||
31 verbose parsed url auth: null,
|
||||
31 verbose parsed url host: null,
|
||||
31 verbose parsed url port: null,
|
||||
31 verbose parsed url hostname: null,
|
||||
31 verbose parsed url hash: null,
|
||||
31 verbose parsed url search: null,
|
||||
31 verbose parsed url query: null,
|
||||
31 verbose parsed url pathname: '0.0.4',
|
||||
31 verbose parsed url path: '0.0.4',
|
||||
31 verbose parsed url href: '0.0.4' }
|
||||
32 verbose addNamed [ 'node-tail', '0.0.4' ]
|
||||
33 verbose addNamed [ '0.0.4', '0.0.4' ]
|
||||
34 verbose cache add name="tail" spec="~0.4.0" args=["tail","~0.4.0"]
|
||||
35 verbose parsed url { protocol: null,
|
||||
35 verbose parsed url slashes: null,
|
||||
35 verbose parsed url auth: null,
|
||||
35 verbose parsed url host: null,
|
||||
35 verbose parsed url port: null,
|
||||
35 verbose parsed url hostname: null,
|
||||
35 verbose parsed url hash: null,
|
||||
35 verbose parsed url search: null,
|
||||
35 verbose parsed url query: null,
|
||||
35 verbose parsed url pathname: '~0.4.0',
|
||||
35 verbose parsed url path: '~0.4.0',
|
||||
35 verbose parsed url href: '~0.4.0' }
|
||||
36 verbose addNamed [ 'tail', '~0.4.0' ]
|
||||
37 verbose addNamed [ null, '>=0.4.0-0 <0.5.0-0' ]
|
||||
38 silly makeCacheDir cache dir uid, gid [ 0, 0 ]
|
||||
39 silly lockFile c572b5f8-express-4-10-1 express@~4.10.1
|
||||
40 verbose lock express@~4.10.1 /root/.npm/c572b5f8-express-4-10-1.lock
|
||||
41 silly lockFile c0bd7c21-socket-io-1-2-0 socket.io@~1.2.0
|
||||
42 verbose lock socket.io@~1.2.0 /root/.npm/c0bd7c21-socket-io-1-2-0.lock
|
||||
43 silly lockFile 7bc2e09d-node-tail-0-0-4 node-tail@0.0.4
|
||||
44 verbose lock node-tail@0.0.4 /root/.npm/7bc2e09d-node-tail-0-0-4.lock
|
||||
45 silly lockFile 81e86088-tail-0-4-0 tail@~0.4.0
|
||||
46 verbose lock tail@~0.4.0 /root/.npm/81e86088-tail-0-4-0.lock
|
||||
47 silly addNameRange { name: 'express',
|
||||
47 silly addNameRange range: '>=4.10.1-0 <4.11.0-0',
|
||||
47 silly addNameRange hasData: false }
|
||||
48 silly addNameRange { name: 'socket.io',
|
||||
48 silly addNameRange range: '>=1.2.0-0 <1.3.0-0',
|
||||
48 silly addNameRange hasData: false }
|
||||
49 silly addNameRange { name: 'tail', range: '>=0.4.0-0 <0.5.0-0', hasData: false }
|
||||
50 verbose request where is /express
|
||||
51 verbose request registry https://registry.npmjs.org/
|
||||
52 verbose request id b01793793819fcd9
|
||||
53 verbose url raw /express
|
||||
54 verbose url resolving [ 'https://registry.npmjs.org/', './express' ]
|
||||
55 verbose url resolved https://registry.npmjs.org/express
|
||||
56 verbose request where is https://registry.npmjs.org/express
|
||||
57 info trying registry request attempt 1 at 14:25:44
|
||||
58 http GET https://registry.npmjs.org/express
|
||||
59 verbose request where is /socket.io
|
||||
60 verbose request registry https://registry.npmjs.org/
|
||||
61 verbose url raw /socket.io
|
||||
62 verbose url resolving [ 'https://registry.npmjs.org/', './socket.io' ]
|
||||
63 verbose url resolved https://registry.npmjs.org/socket.io
|
||||
64 verbose request where is https://registry.npmjs.org/socket.io
|
||||
65 info trying registry request attempt 1 at 14:25:44
|
||||
66 http GET https://registry.npmjs.org/socket.io
|
||||
67 verbose request where is /node-tail
|
||||
68 verbose request registry https://registry.npmjs.org/
|
||||
69 verbose url raw /node-tail
|
||||
70 verbose url resolving [ 'https://registry.npmjs.org/', './node-tail' ]
|
||||
71 verbose url resolved https://registry.npmjs.org/node-tail
|
||||
72 verbose request where is https://registry.npmjs.org/node-tail
|
||||
73 info trying registry request attempt 1 at 14:25:44
|
||||
74 http GET https://registry.npmjs.org/node-tail
|
||||
75 verbose request where is /tail
|
||||
76 verbose request registry https://registry.npmjs.org/
|
||||
77 verbose url raw /tail
|
||||
78 verbose url resolving [ 'https://registry.npmjs.org/', './tail' ]
|
||||
79 verbose url resolved https://registry.npmjs.org/tail
|
||||
80 verbose request where is https://registry.npmjs.org/tail
|
||||
81 info trying registry request attempt 1 at 14:25:44
|
||||
82 http GET https://registry.npmjs.org/tail
|
||||
83 http 200 https://registry.npmjs.org/tail
|
||||
84 silly registry.get cb [ 200,
|
||||
84 silly registry.get { date: 'Thu, 09 Apr 2015 06:25:45 GMT',
|
||||
84 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)',
|
||||
84 silly registry.get etag: '"C9AIR53EVM8NBBGXJRBQ2E57K"',
|
||||
84 silly registry.get 'content-type': 'application/json',
|
||||
84 silly registry.get 'cache-control': 'max-age=60',
|
||||
84 silly registry.get 'content-length': '17175',
|
||||
84 silly registry.get 'accept-ranges': 'bytes',
|
||||
84 silly registry.get via: '1.1 varnish',
|
||||
84 silly registry.get age: '0',
|
||||
84 silly registry.get 'x-served-by': 'cache-nrt6131-NRT',
|
||||
84 silly registry.get 'x-cache': 'MISS',
|
||||
84 silly registry.get 'x-cache-hits': '0',
|
||||
84 silly registry.get 'x-timer': 'S1428560745.664080,VS0,VE330',
|
||||
84 silly registry.get vary: 'Accept',
|
||||
84 silly registry.get 'keep-alive': 'timeout=10, max=50',
|
||||
84 silly registry.get connection: 'Keep-Alive' } ]
|
||||
85 silly addNameRange number 2 { name: 'tail', range: '>=0.4.0-0 <0.5.0-0', hasData: true }
|
||||
86 silly addNameRange versions [ 'tail',
|
||||
86 silly addNameRange [ '0.0.3',
|
||||
86 silly addNameRange '0.0.4',
|
||||
86 silly addNameRange '0.1.0',
|
||||
86 silly addNameRange '0.1.1',
|
||||
86 silly addNameRange '0.1.2',
|
||||
86 silly addNameRange '0.2.0',
|
||||
86 silly addNameRange '0.2.1',
|
||||
86 silly addNameRange '0.2.2',
|
||||
86 silly addNameRange '0.2.3',
|
||||
86 silly addNameRange '0.2.4',
|
||||
86 silly addNameRange '0.3.0',
|
||||
86 silly addNameRange '0.3.1',
|
||||
86 silly addNameRange '0.3.2',
|
||||
86 silly addNameRange '0.3.5',
|
||||
86 silly addNameRange '0.3.6',
|
||||
86 silly addNameRange '0.3.7',
|
||||
86 silly addNameRange '0.3.8',
|
||||
86 silly addNameRange '0.3.9',
|
||||
86 silly addNameRange '0.4.0' ] ]
|
||||
87 verbose addNamed [ 'tail', '0.4.0' ]
|
||||
88 verbose addNamed [ '0.4.0', '0.4.0' ]
|
||||
89 silly lockFile e7d4c0e4-tail-0-4-0 tail@0.4.0
|
||||
90 verbose lock tail@0.4.0 /root/.npm/e7d4c0e4-tail-0-4-0.lock
|
||||
91 silly lockFile 8067702d-ry-npmjs-org-tail-tail-0-4-0-tgz https://registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
92 verbose lock https://registry.npmjs.org/tail/-/tail-0.4.0.tgz /root/.npm/8067702d-ry-npmjs-org-tail-tail-0-4-0-tgz.lock
|
||||
93 verbose addRemoteTarball [ 'https://registry.npmjs.org/tail/-/tail-0.4.0.tgz',
|
||||
93 verbose addRemoteTarball 'd29de72750cc99db1e053aff13c359ecfb713002' ]
|
||||
94 info retry fetch attempt 1 at 14:25:46
|
||||
95 verbose fetch to= /tmp/npm-25723-hzRsuUDH/registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
96 http GET https://registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
97 http 200 https://registry.npmjs.org/node-tail
|
||||
98 silly registry.get cb [ 200,
|
||||
98 silly registry.get { date: 'Thu, 09 Apr 2015 06:25:46 GMT',
|
||||
98 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)',
|
||||
98 silly registry.get etag: '"3O3MG0O1PBD2NBRQMCK50UX0W"',
|
||||
98 silly registry.get 'content-type': 'application/json',
|
||||
98 silly registry.get 'cache-control': 'max-age=60',
|
||||
98 silly registry.get 'content-length': '4600',
|
||||
98 silly registry.get 'accept-ranges': 'bytes',
|
||||
98 silly registry.get via: '1.1 varnish',
|
||||
98 silly registry.get age: '0',
|
||||
98 silly registry.get 'x-served-by': 'cache-nrt6131-NRT',
|
||||
98 silly registry.get 'x-cache': 'MISS',
|
||||
98 silly registry.get 'x-cache-hits': '0',
|
||||
98 silly registry.get 'x-timer': 'S1428560745.575766,VS0,VE756',
|
||||
98 silly registry.get vary: 'Accept',
|
||||
98 silly registry.get 'keep-alive': 'timeout=10, max=50',
|
||||
98 silly registry.get connection: 'Keep-Alive' } ]
|
||||
99 silly lockFile 9e6ddce3-rg-node-tail-node-tail-0-0-4-tgz https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
100 verbose lock https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz /root/.npm/9e6ddce3-rg-node-tail-node-tail-0-0-4-tgz.lock
|
||||
101 verbose addRemoteTarball [ 'https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz',
|
||||
101 verbose addRemoteTarball '60d6456c71a22427ebe794565cb1954709978501' ]
|
||||
102 info retry fetch attempt 1 at 14:25:46
|
||||
103 verbose fetch to= /tmp/npm-25723-hzRsuUDH/registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
104 http GET https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
105 http 200 https://registry.npmjs.org/socket.io
|
||||
106 silly registry.get cb [ 200,
|
||||
106 silly registry.get { date: 'Thu, 09 Apr 2015 06:25:45 GMT',
|
||||
106 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)',
|
||||
106 silly registry.get etag: '"2DXCIXNLVU70Z8PJHO5V9XB6E"',
|
||||
106 silly registry.get 'content-type': 'application/json',
|
||||
106 silly registry.get 'cache-control': 'max-age=60',
|
||||
106 silly registry.get 'content-length': '111044',
|
||||
106 silly registry.get 'accept-ranges': 'bytes',
|
||||
106 silly registry.get via: '1.1 varnish',
|
||||
106 silly registry.get age: '7',
|
||||
106 silly registry.get 'x-served-by': 'cache-nrt6126-NRT',
|
||||
106 silly registry.get 'x-cache': 'HIT',
|
||||
106 silly registry.get 'x-cache-hits': '1',
|
||||
106 silly registry.get 'x-timer': 'S1428560745.573669,VS0,VE1',
|
||||
106 silly registry.get vary: 'Accept',
|
||||
106 silly registry.get 'keep-alive': 'timeout=10, max=50',
|
||||
106 silly registry.get connection: 'Keep-Alive' } ]
|
||||
107 silly addNameRange number 2 { name: 'socket.io', range: '>=1.2.0-0 <1.3.0-0', hasData: true }
|
||||
108 silly addNameRange versions [ 'socket.io',
|
||||
108 silly addNameRange [ '0.3.8',
|
||||
108 silly addNameRange '0.4.0',
|
||||
108 silly addNameRange '0.4.1',
|
||||
108 silly addNameRange '0.5.1',
|
||||
108 silly addNameRange '0.5.3',
|
||||
108 silly addNameRange '0.6.0',
|
||||
108 silly addNameRange '0.6.1',
|
||||
108 silly addNameRange '0.6.3',
|
||||
108 silly addNameRange '0.6.4',
|
||||
108 silly addNameRange '0.6.5',
|
||||
108 silly addNameRange '0.6.6',
|
||||
108 silly addNameRange '0.6.7',
|
||||
108 silly addNameRange '0.6.8',
|
||||
108 silly addNameRange '0.6.9',
|
||||
108 silly addNameRange '0.6.10',
|
||||
108 silly addNameRange '0.6.11',
|
||||
108 silly addNameRange '0.6.12',
|
||||
108 silly addNameRange '0.6.14',
|
||||
108 silly addNameRange '0.6.15',
|
||||
108 silly addNameRange '0.6.16',
|
||||
108 silly addNameRange '0.6.17',
|
||||
108 silly addNameRange '0.6.18',
|
||||
108 silly addNameRange '0.7.0',
|
||||
108 silly addNameRange '0.7.1',
|
||||
108 silly addNameRange '0.7.2',
|
||||
108 silly addNameRange '0.7.3',
|
||||
108 silly addNameRange '0.7.4',
|
||||
108 silly addNameRange '0.7.5',
|
||||
108 silly addNameRange '0.7.6',
|
||||
108 silly addNameRange '0.7.7',
|
||||
108 silly addNameRange '0.7.8',
|
||||
108 silly addNameRange '0.7.9',
|
||||
108 silly addNameRange '0.7.10',
|
||||
108 silly addNameRange '0.7.11',
|
||||
108 silly addNameRange '0.8.0',
|
||||
108 silly addNameRange '0.8.1',
|
||||
108 silly addNameRange '0.8.2',
|
||||
108 silly addNameRange '0.8.3',
|
||||
108 silly addNameRange '0.8.4',
|
||||
108 silly addNameRange '0.8.5',
|
||||
108 silly addNameRange '0.8.6',
|
||||
108 silly addNameRange '0.8.7',
|
||||
108 silly addNameRange '0.9.0',
|
||||
108 silly addNameRange '0.9.1',
|
||||
108 silly addNameRange '0.9.1-1',
|
||||
108 silly addNameRange '0.9.2',
|
||||
108 silly addNameRange '0.9.3',
|
||||
108 silly addNameRange '0.9.4',
|
||||
108 silly addNameRange '0.9.5',
|
||||
108 silly addNameRange '0.9.6',
|
||||
108 silly addNameRange '0.9.7',
|
||||
108 silly addNameRange '0.9.8',
|
||||
108 silly addNameRange '0.9.9',
|
||||
108 silly addNameRange '0.9.10',
|
||||
108 silly addNameRange '0.9.11',
|
||||
108 silly addNameRange '0.9.12',
|
||||
108 silly addNameRange '0.9.13',
|
||||
108 silly addNameRange '0.9.14',
|
||||
108 silly addNameRange '0.9.15',
|
||||
108 silly addNameRange '0.9.16',
|
||||
108 silly addNameRange '1.0.0-pre',
|
||||
108 silly addNameRange '1.0.0-pre2',
|
||||
108 silly addNameRange '1.0.0-pre3',
|
||||
108 silly addNameRange '1.0.0-pre4',
|
||||
108 silly addNameRange '1.0.0-pre5',
|
||||
108 silly addNameRange '0.9.17',
|
||||
108 silly addNameRange '1.0.0',
|
||||
108 silly addNameRange '1.0.1',
|
||||
108 silly addNameRange '1.0.2',
|
||||
108 silly addNameRange '1.0.3',
|
||||
108 silly addNameRange '1.0.4',
|
||||
108 silly addNameRange '1.0.5',
|
||||
108 silly addNameRange '1.0.6',
|
||||
108 silly addNameRange '1.1.0',
|
||||
108 silly addNameRange '1.2.0',
|
||||
108 silly addNameRange '1.2.1',
|
||||
108 silly addNameRange '1.3.0',
|
||||
108 silly addNameRange '1.3.1',
|
||||
108 silly addNameRange '1.3.2',
|
||||
108 silly addNameRange '1.3.3',
|
||||
108 silly addNameRange '1.3.4',
|
||||
108 silly addNameRange '1.3.5' ] ]
|
||||
109 verbose addNamed [ 'socket.io', '1.2.1' ]
|
||||
110 verbose addNamed [ '1.2.1', '1.2.1' ]
|
||||
111 silly lockFile 77e414a6-socket-io-1-2-1 socket.io@1.2.1
|
||||
112 verbose lock socket.io@1.2.1 /root/.npm/77e414a6-socket-io-1-2-1.lock
|
||||
113 silly lockFile 03c4f5da-rg-socket-io-socket-io-1-2-1-tgz https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
114 verbose lock https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz /root/.npm/03c4f5da-rg-socket-io-socket-io-1-2-1-tgz.lock
|
||||
115 verbose addRemoteTarball [ 'https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz',
|
||||
115 verbose addRemoteTarball '84400af534c0d32baa9ac88937eedb5b8465ee92' ]
|
||||
116 info retry fetch attempt 1 at 14:25:46
|
||||
117 verbose fetch to= /tmp/npm-25723-hzRsuUDH/registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
118 http GET https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
119 http 200 https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
120 silly lockFile 9e6ddce3-rg-node-tail-node-tail-0-0-4-tgz https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
121 silly lockFile 9e6ddce3-rg-node-tail-node-tail-0-0-4-tgz https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz
|
||||
122 silly lockFile 7bc2e09d-node-tail-0-0-4 node-tail@0.0.4
|
||||
123 silly lockFile 7bc2e09d-node-tail-0-0-4 node-tail@0.0.4
|
||||
124 http 200 https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
125 http 200 https://registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
126 silly lockFile 8067702d-ry-npmjs-org-tail-tail-0-4-0-tgz https://registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
127 silly lockFile 8067702d-ry-npmjs-org-tail-tail-0-4-0-tgz https://registry.npmjs.org/tail/-/tail-0.4.0.tgz
|
||||
128 silly lockFile e7d4c0e4-tail-0-4-0 tail@0.4.0
|
||||
129 silly lockFile e7d4c0e4-tail-0-4-0 tail@0.4.0
|
||||
130 silly lockFile 81e86088-tail-0-4-0 tail@~0.4.0
|
||||
131 silly lockFile 81e86088-tail-0-4-0 tail@~0.4.0
|
||||
132 http 200 https://registry.npmjs.org/express
|
||||
133 silly registry.get cb [ 200,
|
||||
133 silly registry.get { date: 'Thu, 09 Apr 2015 06:25:45 GMT',
|
||||
133 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)',
|
||||
133 silly registry.get etag: '"9UQXXU09GJOSW3WO2L58ANAHK"',
|
||||
133 silly registry.get 'content-type': 'application/json',
|
||||
133 silly registry.get 'cache-control': 'max-age=60',
|
||||
133 silly registry.get 'content-length': '492110',
|
||||
133 silly registry.get 'accept-ranges': 'bytes',
|
||||
133 silly registry.get via: '1.1 varnish',
|
||||
133 silly registry.get age: '16',
|
||||
133 silly registry.get 'x-served-by': 'cache-nrt6126-NRT',
|
||||
133 silly registry.get 'x-cache': 'HIT',
|
||||
133 silly registry.get 'x-cache-hits': '2',
|
||||
133 silly registry.get 'x-timer': 'S1428560745.583395,VS0,VE0',
|
||||
133 silly registry.get vary: 'Accept',
|
||||
133 silly registry.get 'keep-alive': 'timeout=10, max=50',
|
||||
133 silly registry.get connection: 'Keep-Alive' } ]
|
||||
134 silly addNameRange number 2 { name: 'express', range: '>=4.10.1-0 <4.11.0-0', hasData: true }
|
||||
135 silly addNameRange versions [ 'express',
|
||||
135 silly addNameRange [ '0.14.0',
|
||||
135 silly addNameRange '0.14.1',
|
||||
135 silly addNameRange '1.0.0',
|
||||
135 silly addNameRange '1.0.1',
|
||||
135 silly addNameRange '1.0.2',
|
||||
135 silly addNameRange '1.0.3',
|
||||
135 silly addNameRange '1.0.4',
|
||||
135 silly addNameRange '1.0.5',
|
||||
135 silly addNameRange '1.0.6',
|
||||
135 silly addNameRange '1.0.7',
|
||||
135 silly addNameRange '1.0.8',
|
||||
135 silly addNameRange '2.0.0',
|
||||
135 silly addNameRange '2.1.0',
|
||||
135 silly addNameRange '2.1.1',
|
||||
135 silly addNameRange '2.2.0',
|
||||
135 silly addNameRange '2.2.1',
|
||||
135 silly addNameRange '2.2.2',
|
||||
135 silly addNameRange '2.3.0',
|
||||
135 silly addNameRange '2.3.1',
|
||||
135 silly addNameRange '2.3.2',
|
||||
135 silly addNameRange '2.3.3',
|
||||
135 silly addNameRange '2.3.4',
|
||||
135 silly addNameRange '2.3.5',
|
||||
135 silly addNameRange '2.3.6',
|
||||
135 silly addNameRange '2.3.7',
|
||||
135 silly addNameRange '2.3.8',
|
||||
135 silly addNameRange '2.3.9',
|
||||
135 silly addNameRange '2.3.10',
|
||||
135 silly addNameRange '2.3.11',
|
||||
135 silly addNameRange '2.3.12',
|
||||
135 silly addNameRange '2.4.0',
|
||||
135 silly addNameRange '2.4.1',
|
||||
135 silly addNameRange '2.4.2',
|
||||
135 silly addNameRange '2.4.3',
|
||||
135 silly addNameRange '2.4.4',
|
||||
135 silly addNameRange '2.4.5',
|
||||
135 silly addNameRange '2.4.6',
|
||||
135 silly addNameRange '2.4.7',
|
||||
135 silly addNameRange '2.5.0',
|
||||
135 silly addNameRange '2.5.1',
|
||||
135 silly addNameRange '2.5.2',
|
||||
135 silly addNameRange '2.5.3',
|
||||
135 silly addNameRange '2.5.4',
|
||||
135 silly addNameRange '2.5.5',
|
||||
135 silly addNameRange '2.5.6',
|
||||
135 silly addNameRange '2.5.7',
|
||||
135 silly addNameRange '2.5.8',
|
||||
135 silly addNameRange '2.5.9',
|
||||
135 silly addNameRange '2.5.10',
|
||||
135 silly addNameRange '2.5.11',
|
||||
135 silly addNameRange '3.0.0',
|
||||
135 silly addNameRange '3.0.1',
|
||||
135 silly addNameRange '3.0.2',
|
||||
135 silly addNameRange '3.0.3',
|
||||
135 silly addNameRange '3.0.4',
|
||||
135 silly addNameRange '3.0.5',
|
||||
135 silly addNameRange '3.0.6',
|
||||
135 silly addNameRange '3.1.0',
|
||||
135 silly addNameRange '3.1.1',
|
||||
135 silly addNameRange '3.1.2',
|
||||
135 silly addNameRange '3.2.0',
|
||||
135 silly addNameRange '3.2.1',
|
||||
135 silly addNameRange '3.2.2',
|
||||
135 silly addNameRange '3.2.3',
|
||||
135 silly addNameRange '3.2.4',
|
||||
135 silly addNameRange '3.2.5',
|
||||
135 silly addNameRange '3.2.6',
|
||||
135 silly addNameRange '3.3.0',
|
||||
135 silly addNameRange '3.3.1',
|
||||
135 silly addNameRange '3.3.2',
|
||||
135 silly addNameRange '3.3.3',
|
||||
135 silly addNameRange '3.3.4',
|
||||
135 silly addNameRange '3.3.5',
|
||||
135 silly addNameRange '3.3.6',
|
||||
135 silly addNameRange '1.0.0-beta',
|
||||
135 silly addNameRange '1.0.0-beta2',
|
||||
135 silly addNameRange '1.0.0-rc',
|
||||
135 silly addNameRange '1.0.0-rc2',
|
||||
135 silly addNameRange '1.0.0-rc3',
|
||||
135 silly addNameRange '1.0.0-rc4',
|
||||
135 silly addNameRange '2.0.0-beta',
|
||||
135 silly addNameRange '2.0.0-beta2',
|
||||
135 silly addNameRange '2.0.0-beta3',
|
||||
135 silly addNameRange '2.0.0-rc',
|
||||
135 silly addNameRange '2.0.0-rc2',
|
||||
135 silly addNameRange '2.0.0-rc3',
|
||||
135 silly addNameRange '3.0.0-alpha1',
|
||||
135 silly addNameRange '3.0.0-alpha2',
|
||||
135 silly addNameRange '3.0.0-alpha3',
|
||||
135 silly addNameRange '3.0.0-alpha4',
|
||||
135 silly addNameRange '3.0.0-alpha5',
|
||||
135 silly addNameRange '3.0.0-beta1',
|
||||
135 silly addNameRange '3.0.0-beta2',
|
||||
135 silly addNameRange '3.0.0-beta3',
|
||||
135 silly addNameRange '3.0.0-beta4',
|
||||
135 silly addNameRange '3.0.0-beta6',
|
||||
135 silly addNameRange '3.0.0-beta7',
|
||||
135 silly addNameRange '3.0.0-rc1',
|
||||
135 silly addNameRange '3.0.0-rc2',
|
||||
135 silly addNameRange '3.0.0-rc3',
|
||||
135 silly addNameRange '3.0.0-rc4',
|
||||
135 silly addNameRange '3.0.0-rc5',
|
||||
135 silly addNameRange '3.3.7',
|
||||
135 silly addNameRange '3.3.8',
|
||||
135 silly addNameRange '3.4.0',
|
||||
135 silly addNameRange '3.4.1',
|
||||
135 silly addNameRange '3.4.2',
|
||||
135 silly addNameRange '3.4.3',
|
||||
135 silly addNameRange '3.4.4',
|
||||
135 silly addNameRange '3.4.5',
|
||||
135 silly addNameRange '3.4.6',
|
||||
135 silly addNameRange '3.4.7',
|
||||
135 silly addNameRange '3.4.8',
|
||||
135 silly addNameRange '4.0.0-rc1',
|
||||
135 silly addNameRange '4.0.0-rc2',
|
||||
135 silly addNameRange '3.5.0',
|
||||
135 silly addNameRange '4.0.0-rc3',
|
||||
135 silly addNameRange '4.0.0-rc4',
|
||||
135 silly addNameRange '3.5.1',
|
||||
135 silly addNameRange '4.0.0',
|
||||
135 silly addNameRange '3.5.2',
|
||||
135 silly addNameRange '4.1.0',
|
||||
135 silly addNameRange '4.1.1',
|
||||
135 silly addNameRange '3.5.3',
|
||||
135 silly addNameRange '4.1.2',
|
||||
135 silly addNameRange '3.6.0',
|
||||
135 silly addNameRange '4.2.0',
|
||||
135 silly addNameRange '3.7.0',
|
||||
135 silly addNameRange '3.8.0',
|
||||
135 silly addNameRange '4.3.0',
|
||||
135 silly addNameRange '4.3.1',
|
||||
135 silly addNameRange '3.8.1',
|
||||
135 silly addNameRange '4.3.2',
|
||||
135 silly addNameRange '3.9.0',
|
||||
135 silly addNameRange '4.4.0',
|
||||
135 silly addNameRange '4.4.1',
|
||||
135 silly addNameRange '3.10.0',
|
||||
135 silly addNameRange '3.10.1',
|
||||
135 silly addNameRange '3.10.2',
|
||||
135 silly addNameRange '3.10.3',
|
||||
135 silly addNameRange '3.10.4',
|
||||
135 silly addNameRange '4.4.2',
|
||||
135 silly addNameRange '3.10.5',
|
||||
135 silly addNameRange '4.4.3',
|
||||
135 silly addNameRange '3.11.0',
|
||||
135 silly addNameRange '4.4.4',
|
||||
135 silly addNameRange '3.12.0',
|
||||
135 silly addNameRange '3.12.1',
|
||||
135 silly addNameRange '4.4.5',
|
||||
135 silly addNameRange '3.13.0',
|
||||
135 silly addNameRange '4.5.0',
|
||||
135 silly addNameRange '4.5.1',
|
||||
135 silly addNameRange '3.14.0',
|
||||
135 silly addNameRange '4.6.0',
|
||||
135 silly addNameRange '4.6.1',
|
||||
135 silly addNameRange '3.15.0',
|
||||
135 silly addNameRange '4.7.0',
|
||||
135 silly addNameRange '3.15.1',
|
||||
135 silly addNameRange '4.7.1',
|
||||
135 silly addNameRange '3.15.2',
|
||||
135 silly addNameRange '4.7.2',
|
||||
135 silly addNameRange '4.7.3',
|
||||
135 silly addNameRange '3.15.3',
|
||||
135 silly addNameRange '4.7.4',
|
||||
135 silly addNameRange '3.16.0',
|
||||
135 silly addNameRange '4.8.0',
|
||||
135 silly addNameRange '3.16.1',
|
||||
135 silly addNameRange '4.8.1',
|
||||
135 silly addNameRange '3.16.2',
|
||||
135 silly addNameRange '4.8.2',
|
||||
135 silly addNameRange '3.16.3',
|
||||
135 silly addNameRange '3.16.4',
|
||||
135 silly addNameRange '4.8.3',
|
||||
135 silly addNameRange '3.16.5',
|
||||
135 silly addNameRange '3.16.6',
|
||||
135 silly addNameRange '4.8.4',
|
||||
135 silly addNameRange '3.16.7',
|
||||
135 silly addNameRange '4.8.5',
|
||||
135 silly addNameRange '3.16.8',
|
||||
135 silly addNameRange '4.8.6',
|
||||
135 silly addNameRange '3.16.9',
|
||||
135 silly addNameRange '4.8.7',
|
||||
135 silly addNameRange '3.16.10',
|
||||
135 silly addNameRange '4.8.8',
|
||||
135 silly addNameRange '3.17.0',
|
||||
135 silly addNameRange '3.17.1',
|
||||
135 silly addNameRange '4.9.0',
|
||||
135 silly addNameRange '3.17.2',
|
||||
135 silly addNameRange '4.9.1',
|
||||
135 silly addNameRange '4.9.2',
|
||||
135 silly addNameRange '3.17.3',
|
||||
135 silly addNameRange '4.9.3',
|
||||
135 silly addNameRange '3.17.4',
|
||||
135 silly addNameRange '4.9.4',
|
||||
135 silly addNameRange '3.17.5',
|
||||
135 silly addNameRange '4.9.5',
|
||||
135 silly addNameRange '3.17.6',
|
||||
135 silly addNameRange '3.17.7',
|
||||
135 silly addNameRange '4.9.6',
|
||||
135 silly addNameRange '4.9.7',
|
||||
135 silly addNameRange '3.17.8',
|
||||
135 silly addNameRange '4.9.8',
|
||||
135 silly addNameRange '3.18.0',
|
||||
135 silly addNameRange '3.18.1',
|
||||
135 silly addNameRange '4.10.0',
|
||||
135 silly addNameRange '3.18.2',
|
||||
135 silly addNameRange '4.10.1',
|
||||
135 silly addNameRange '5.0.0-alpha.1',
|
||||
135 silly addNameRange '3.18.3',
|
||||
135 silly addNameRange '4.10.2',
|
||||
135 silly addNameRange '3.18.4',
|
||||
135 silly addNameRange '4.10.3',
|
||||
135 silly addNameRange '4.10.4',
|
||||
135 silly addNameRange '4.10.5',
|
||||
135 silly addNameRange '3.18.5',
|
||||
135 silly addNameRange '3.18.6',
|
||||
135 silly addNameRange '4.10.6',
|
||||
135 silly addNameRange '4.10.7',
|
||||
135 silly addNameRange '3.19.0',
|
||||
135 silly addNameRange '4.10.8',
|
||||
135 silly addNameRange '4.11.0',
|
||||
135 silly addNameRange '3.19.1',
|
||||
135 silly addNameRange '4.11.1',
|
||||
135 silly addNameRange '3.19.2',
|
||||
135 silly addNameRange '4.11.2',
|
||||
135 silly addNameRange '3.20.0',
|
||||
135 silly addNameRange '4.12.0',
|
||||
135 silly addNameRange '3.20.1',
|
||||
135 silly addNameRange '4.12.1',
|
||||
135 silly addNameRange '4.12.2',
|
||||
135 silly addNameRange '3.20.2',
|
||||
135 silly addNameRange '4.12.3' ] ]
|
||||
136 verbose addNamed [ 'express', '4.10.8' ]
|
||||
137 verbose addNamed [ '4.10.8', '4.10.8' ]
|
||||
138 silly lockFile 44558bf5-express-4-10-8 express@4.10.8
|
||||
139 verbose lock express@4.10.8 /root/.npm/44558bf5-express-4-10-8.lock
|
||||
140 silly lockFile 03c4f5da-rg-socket-io-socket-io-1-2-1-tgz https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
141 silly lockFile 03c4f5da-rg-socket-io-socket-io-1-2-1-tgz https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz
|
||||
142 silly lockFile 77e414a6-socket-io-1-2-1 socket.io@1.2.1
|
||||
143 silly lockFile 77e414a6-socket-io-1-2-1 socket.io@1.2.1
|
||||
144 silly lockFile 95f2bc2f-s-org-express-express-4-10-8-tgz https://registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
145 verbose lock https://registry.npmjs.org/express/-/express-4.10.8.tgz /root/.npm/95f2bc2f-s-org-express-express-4-10-8-tgz.lock
|
||||
146 silly lockFile c0bd7c21-socket-io-1-2-0 socket.io@~1.2.0
|
||||
147 silly lockFile c0bd7c21-socket-io-1-2-0 socket.io@~1.2.0
|
||||
148 verbose addRemoteTarball [ 'https://registry.npmjs.org/express/-/express-4.10.8.tgz',
|
||||
148 verbose addRemoteTarball '2d83571e065c0efb2679c0a5f9ae66aeaa47024a' ]
|
||||
149 info retry fetch attempt 1 at 14:25:49
|
||||
150 verbose fetch to= /tmp/npm-25723-hzRsuUDH/registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
151 http GET https://registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
152 http 200 https://registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
153 silly lockFile 95f2bc2f-s-org-express-express-4-10-8-tgz https://registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
154 silly lockFile 95f2bc2f-s-org-express-express-4-10-8-tgz https://registry.npmjs.org/express/-/express-4.10.8.tgz
|
||||
155 silly lockFile 44558bf5-express-4-10-8 express@4.10.8
|
||||
156 silly lockFile 44558bf5-express-4-10-8 express@4.10.8
|
||||
157 silly lockFile c572b5f8-express-4-10-1 express@~4.10.1
|
||||
158 silly lockFile c572b5f8-express-4-10-1 express@~4.10.1
|
||||
159 silly resolved [ { name: 'node-tail',
|
||||
159 silly resolved version: '0.0.4',
|
||||
159 silly resolved author: { name: 'rhrn', email: 'me@rhrn.ru' },
|
||||
159 silly resolved preferGlobal: 'false',
|
||||
159 silly resolved bin: { 'node-tail': './bin/node-tail' },
|
||||
159 silly resolved dependencies: { 'socket.io': 'latest', commander: '~1.1.1' },
|
||||
159 silly resolved repository: { type: 'git', url: 'https://github.com/rhrn/node-tail.git' },
|
||||
159 silly resolved engines: { node: 'latest' },
|
||||
159 silly resolved readme: '#node-tail\n\n Web `tail` - display last part of a file\n\n##install\n\n```\nnpm install -g node-tail\n```\n\n##usage\n\n```\nnode-tail -p 3000 ~/file.log\n```\n\nopen in browser\n```\nhttp://localhost:3000/\n```\n',
|
||||
159 silly resolved readmeFilename: 'README.md',
|
||||
159 silly resolved _id: 'node-tail@0.0.4',
|
||||
159 silly resolved description: 'Web `tail` - display last part of a file',
|
||||
159 silly resolved dist:
|
||||
159 silly resolved { shasum: '60d6456c71a22427ebe794565cb1954709978501',
|
||||
159 silly resolved tarball: 'http://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz' },
|
||||
159 silly resolved _from: 'node-tail@0.0.4',
|
||||
159 silly resolved _npmVersion: '1.2.14',
|
||||
159 silly resolved _npmUser: { name: 'rhrn', email: 'nester@bk.ru' },
|
||||
159 silly resolved maintainers: [ [Object] ],
|
||||
159 silly resolved directories: {},
|
||||
159 silly resolved _shasum: '60d6456c71a22427ebe794565cb1954709978501',
|
||||
159 silly resolved _resolved: 'https://registry.npmjs.org/node-tail/-/node-tail-0.0.4.tgz' },
|
||||
159 silly resolved { author: { name: 'Luca Grulla' },
|
||||
159 silly resolved contributors: [ [Object], [Object], [Object] ],
|
||||
159 silly resolved name: 'tail',
|
||||
159 silly resolved description: 'tail a file in node',
|
||||
159 silly resolved version: '0.4.0',
|
||||
159 silly resolved repository:
|
||||
159 silly resolved { type: 'git',
|
||||
159 silly resolved url: 'git://github.com/lucagrulla/node-tail.git' },
|
||||
159 silly resolved main: 'tail',
|
||||
159 silly resolved engines: { node: '>= 0.4.0' },
|
||||
159 silly resolved dependencies: {},
|
||||
159 silly resolved devDependencies: { 'coffee-script': '1.7.1' },
|
||||
159 silly resolved bugs: { url: 'https://github.com/lucagrulla/node-tail/issues' },
|
||||
159 silly resolved homepage: 'https://github.com/lucagrulla/node-tail',
|
||||
159 silly resolved _id: 'tail@0.4.0',
|
||||
159 silly resolved scripts: {},
|
||||
159 silly resolved _shasum: 'd29de72750cc99db1e053aff13c359ecfb713002',
|
||||
159 silly resolved _from: 'tail@~0.4.0',
|
||||
159 silly resolved _npmVersion: '1.4.15',
|
||||
159 silly resolved _npmUser: { name: 'lucagrulla', email: 'luca.grulla@gmail.com' },
|
||||
159 silly resolved maintainers: [ [Object] ],
|
||||
159 silly resolved dist:
|
||||
159 silly resolved { shasum: 'd29de72750cc99db1e053aff13c359ecfb713002',
|
||||
159 silly resolved tarball: 'http://registry.npmjs.org/tail/-/tail-0.4.0.tgz' },
|
||||
159 silly resolved directories: {},
|
||||
159 silly resolved _resolved: 'https://registry.npmjs.org/tail/-/tail-0.4.0.tgz' },
|
||||
159 silly resolved { name: 'socket.io',
|
||||
159 silly resolved version: '1.2.1',
|
||||
159 silly resolved description: 'node.js realtime framework server',
|
||||
159 silly resolved keywords:
|
||||
159 silly resolved [ 'realtime',
|
||||
159 silly resolved 'framework',
|
||||
159 silly resolved 'websocket',
|
||||
159 silly resolved 'tcp',
|
||||
159 silly resolved 'events',
|
||||
159 silly resolved 'socket',
|
||||
159 silly resolved 'io' ],
|
||||
159 silly resolved repository: { type: 'git', url: 'git://github.com/Automattic/socket.io' },
|
||||
159 silly resolved scripts: { test: 'make test' },
|
||||
159 silly resolved dependencies:
|
||||
159 silly resolved { 'engine.io': '1.4.3',
|
||||
159 silly resolved 'socket.io-parser': '2.2.2',
|
||||
159 silly resolved 'socket.io-client': '1.2.1',
|
||||
159 silly resolved 'socket.io-adapter': '0.3.1',
|
||||
159 silly resolved 'has-binary-data': '0.1.3',
|
||||
159 silly resolved debug: '0.7.4' },
|
||||
159 silly resolved devDependencies:
|
||||
159 silly resolved { mocha: '1.16.2',
|
||||
159 silly resolved 'expect.js': '0.3.1',
|
||||
159 silly resolved supertest: '0.8.2',
|
||||
159 silly resolved superagent: '0.17.0',
|
||||
159 silly resolved istanbul: '0.2.3' },
|
||||
159 silly resolved contributors: [ [Object], [Object], [Object], [Object] ],
|
||||
159 silly resolved gitHead: '24d06d76ddf0808ac370e39fd57329d3048d73e4',
|
||||
159 silly resolved bugs: { url: 'https://github.com/Automattic/socket.io/issues' },
|
||||
159 silly resolved homepage: 'https://github.com/Automattic/socket.io',
|
||||
159 silly resolved _id: 'socket.io@1.2.1',
|
||||
159 silly resolved _shasum: '84400af534c0d32baa9ac88937eedb5b8465ee92',
|
||||
159 silly resolved _from: 'socket.io@~1.2.0',
|
||||
159 silly resolved _npmVersion: '1.4.21',
|
||||
159 silly resolved _npmUser: { name: 'rauchg', email: 'rauchg@gmail.com' },
|
||||
159 silly resolved maintainers: [ [Object] ],
|
||||
159 silly resolved dist:
|
||||
159 silly resolved { shasum: '84400af534c0d32baa9ac88937eedb5b8465ee92',
|
||||
159 silly resolved tarball: 'http://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz' },
|
||||
159 silly resolved directories: {},
|
||||
159 silly resolved _resolved: 'https://registry.npmjs.org/socket.io/-/socket.io-1.2.1.tgz' },
|
||||
159 silly resolved { name: 'express',
|
||||
159 silly resolved description: 'Fast, unopinionated, minimalist web framework',
|
||||
159 silly resolved version: '4.10.8',
|
||||
159 silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' },
|
||||
159 silly resolved contributors:
|
||||
159 silly resolved [ [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object] ],
|
||||
159 silly resolved license: 'MIT',
|
||||
159 silly resolved repository: { type: 'git', url: 'https://github.com/strongloop/express' },
|
||||
159 silly resolved homepage: 'http://expressjs.com/',
|
||||
159 silly resolved keywords:
|
||||
159 silly resolved [ 'express',
|
||||
159 silly resolved 'framework',
|
||||
159 silly resolved 'sinatra',
|
||||
159 silly resolved 'web',
|
||||
159 silly resolved 'rest',
|
||||
159 silly resolved 'restful',
|
||||
159 silly resolved 'router',
|
||||
159 silly resolved 'app',
|
||||
159 silly resolved 'api' ],
|
||||
159 silly resolved dependencies:
|
||||
159 silly resolved { accepts: '~1.1.4',
|
||||
159 silly resolved 'content-disposition': '0.5.0',
|
||||
159 silly resolved 'cookie-signature': '1.0.5',
|
||||
159 silly resolved debug: '~2.1.1',
|
||||
159 silly resolved depd: '~1.0.0',
|
||||
159 silly resolved 'escape-html': '1.0.1',
|
||||
159 silly resolved etag: '~1.5.1',
|
||||
159 silly resolved finalhandler: '0.3.3',
|
||||
159 silly resolved fresh: '0.2.4',
|
||||
159 silly resolved 'media-typer': '0.3.0',
|
||||
159 silly resolved methods: '1.1.1',
|
||||
159 silly resolved 'on-finished': '~2.2.0',
|
||||
159 silly resolved parseurl: '~1.3.0',
|
||||
159 silly resolved 'path-to-regexp': '0.1.3',
|
||||
159 silly resolved 'proxy-addr': '~1.0.5',
|
||||
159 silly resolved qs: '2.3.3',
|
||||
159 silly resolved 'range-parser': '~1.0.2',
|
||||
159 silly resolved send: '0.10.1',
|
||||
159 silly resolved 'serve-static': '~1.7.2',
|
||||
159 silly resolved 'type-is': '~1.5.5',
|
||||
159 silly resolved vary: '~1.0.0',
|
||||
159 silly resolved cookie: '0.1.2',
|
||||
159 silly resolved 'merge-descriptors': '0.0.2',
|
||||
159 silly resolved 'utils-merge': '1.0.0' },
|
||||
159 silly resolved devDependencies:
|
||||
159 silly resolved { after: '0.8.1',
|
||||
159 silly resolved istanbul: '0.3.5',
|
||||
159 silly resolved mocha: '~2.0.0',
|
||||
159 silly resolved should: '~4.3.1',
|
||||
159 silly resolved supertest: '~0.15.0',
|
||||
159 silly resolved ejs: '~1.0.0',
|
||||
159 silly resolved marked: '0.3.2',
|
||||
159 silly resolved hjs: '~0.0.6',
|
||||
159 silly resolved 'body-parser': '~1.10.1',
|
||||
159 silly resolved 'connect-redis': '~2.1.0',
|
||||
159 silly resolved 'cookie-parser': '~1.3.3',
|
||||
159 silly resolved 'express-session': '~1.9.2',
|
||||
159 silly resolved jade: '~1.8.2',
|
||||
159 silly resolved 'method-override': '~2.3.1',
|
||||
159 silly resolved morgan: '~1.5.1',
|
||||
159 silly resolved multiparty: '~4.1.0',
|
||||
159 silly resolved vhost: '~3.0.0' },
|
||||
159 silly resolved engines: { node: '>= 0.10.0' },
|
||||
159 silly resolved files: [ 'LICENSE', 'History.md', 'Readme.md', 'index.js', 'lib/' ],
|
||||
159 silly resolved scripts:
|
||||
159 silly resolved { test: 'mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/',
|
||||
159 silly resolved 'test-cov': 'istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/',
|
||||
159 silly resolved 'test-tap': 'mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/',
|
||||
159 silly resolved 'test-travis': 'istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/' },
|
||||
159 silly resolved gitHead: '08939683c7a2e5d7dc928d310ebab65878bffff3',
|
||||
159 silly resolved bugs: { url: 'https://github.com/strongloop/express/issues' },
|
||||
159 silly resolved _id: 'express@4.10.8',
|
||||
159 silly resolved _shasum: '2d83571e065c0efb2679c0a5f9ae66aeaa47024a',
|
||||
159 silly resolved _from: 'express@~4.10.1',
|
||||
159 silly resolved _npmVersion: '1.4.28',
|
||||
159 silly resolved _npmUser: { name: 'dougwilson', email: 'doug@somethingdoug.com' },
|
||||
159 silly resolved maintainers:
|
||||
159 silly resolved [ [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object],
|
||||
159 silly resolved [Object] ],
|
||||
159 silly resolved dist:
|
||||
159 silly resolved { shasum: '2d83571e065c0efb2679c0a5f9ae66aeaa47024a',
|
||||
159 silly resolved tarball: 'http://registry.npmjs.org/express/-/express-4.10.8.tgz' },
|
||||
159 silly resolved directories: {},
|
||||
159 silly resolved _resolved: 'https://registry.npmjs.org/express/-/express-4.10.8.tgz' } ]
|
||||
160 info install node-tail@0.0.4 into /mnt/hgfs/jumpserver/websocket
|
||||
161 info install tail@0.4.0 into /mnt/hgfs/jumpserver/websocket
|
||||
162 info install socket.io@1.2.1 into /mnt/hgfs/jumpserver/websocket
|
||||
163 info install express@4.10.8 into /mnt/hgfs/jumpserver/websocket
|
||||
164 info installOne node-tail@0.0.4
|
||||
165 warn engine node-tail@0.0.4: wanted: {"node":"latest"} (current: {"node":"0.10.33","npm":"1.4.28"})
|
||||
166 info installOne tail@0.4.0
|
||||
167 info installOne socket.io@1.2.1
|
||||
168 info installOne express@4.10.8
|
||||
169 verbose node_modules/node-tail unbuild
|
||||
170 verbose node_modules/tail unbuild
|
||||
171 verbose node_modules/socket.io unbuild
|
||||
172 verbose node_modules/express unbuild
|
||||
173 verbose tar unpack /root/.npm/node-tail/0.0.4/package.tgz
|
||||
174 silly lockFile fe049280-websocket-node-modules-node-tail tar:///mnt/hgfs/jumpserver/websocket/node_modules/node-tail
|
||||
175 verbose lock tar:///mnt/hgfs/jumpserver/websocket/node_modules/node-tail /root/.npm/fe049280-websocket-node-modules-node-tail.lock
|
||||
176 silly lockFile 053f900c--npm-node-tail-0-0-4-package-tgz tar:///root/.npm/node-tail/0.0.4/package.tgz
|
||||
177 verbose lock tar:///root/.npm/node-tail/0.0.4/package.tgz /root/.npm/053f900c--npm-node-tail-0-0-4-package-tgz.lock
|
||||
178 verbose tar unpack /root/.npm/tail/0.4.0/package.tgz
|
||||
179 silly lockFile 62713ce4-rver-websocket-node-modules-tail tar:///mnt/hgfs/jumpserver/websocket/node_modules/tail
|
||||
180 verbose lock tar:///mnt/hgfs/jumpserver/websocket/node_modules/tail /root/.npm/62713ce4-rver-websocket-node-modules-tail.lock
|
||||
181 silly lockFile 1ed23799--root-npm-tail-0-4-0-package-tgz tar:///root/.npm/tail/0.4.0/package.tgz
|
||||
182 verbose lock tar:///root/.npm/tail/0.4.0/package.tgz /root/.npm/1ed23799--root-npm-tail-0-4-0-package-tgz.lock
|
||||
183 verbose tar unpack /root/.npm/socket.io/1.2.1/package.tgz
|
||||
184 silly lockFile 380be7e1-websocket-node-modules-socket-io tar:///mnt/hgfs/jumpserver/websocket/node_modules/socket.io
|
||||
185 verbose lock tar:///mnt/hgfs/jumpserver/websocket/node_modules/socket.io /root/.npm/380be7e1-websocket-node-modules-socket-io.lock
|
||||
186 silly lockFile d3c35dc3--npm-socket-io-1-2-1-package-tgz tar:///root/.npm/socket.io/1.2.1/package.tgz
|
||||
187 verbose lock tar:///root/.npm/socket.io/1.2.1/package.tgz /root/.npm/d3c35dc3--npm-socket-io-1-2-1-package-tgz.lock
|
||||
188 verbose tar unpack /root/.npm/express/4.10.8/package.tgz
|
||||
189 silly lockFile de0ac3f3-r-websocket-node-modules-express tar:///mnt/hgfs/jumpserver/websocket/node_modules/express
|
||||
190 verbose lock tar:///mnt/hgfs/jumpserver/websocket/node_modules/express /root/.npm/de0ac3f3-r-websocket-node-modules-express.lock
|
||||
191 silly lockFile da9ae1a7-t-npm-express-4-10-8-package-tgz tar:///root/.npm/express/4.10.8/package.tgz
|
||||
192 verbose lock tar:///root/.npm/express/4.10.8/package.tgz /root/.npm/da9ae1a7-t-npm-express-4-10-8-package-tgz.lock
|
||||
193 silly gunzTarPerm modes [ '755', '644' ]
|
||||
194 silly gunzTarPerm modes [ '755', '644' ]
|
||||
195 silly gunzTarPerm modes [ '755', '644' ]
|
||||
196 silly gunzTarPerm modes [ '755', '644' ]
|
||||
197 silly gunzTarPerm extractEntry package.json
|
||||
198 silly gunzTarPerm extractEntry package.json
|
||||
199 silly gunzTarPerm extractEntry package.json
|
||||
200 silly gunzTarPerm extractEntry package.json
|
||||
201 silly gunzTarPerm modified mode [ 'package.json', 438, 420 ]
|
||||
202 silly gunzTarPerm extractEntry .npmignore
|
||||
203 silly gunzTarPerm extractEntry README.md
|
||||
204 silly gunzTarPerm extractEntry README.md
|
||||
205 silly gunzTarPerm extractEntry tail.js
|
||||
206 silly gunzTarPerm extractEntry .npmignore
|
||||
207 silly gunzTarPerm extractEntry LICENSE
|
||||
208 silly gunzTarPerm extractEntry LICENSE
|
||||
209 silly gunzTarPerm modified mode [ 'LICENSE', 438, 420 ]
|
||||
210 silly gunzTarPerm extractEntry index.js
|
||||
211 silly gunzTarPerm modified mode [ 'index.js', 438, 420 ]
|
||||
212 error Error: EPERM, chown '/mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json'
|
||||
212 error { [Error: EPERM, chown '/mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json']
|
||||
212 error errno: 50,
|
||||
212 error code: 'EPERM',
|
||||
212 error path: '/mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json',
|
||||
212 error fstream_finish_call: 'chown',
|
||||
212 error fstream_type: 'File',
|
||||
212 error fstream_path: '/mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json',
|
||||
212 error fstream_class: 'FileWriter',
|
||||
212 error fstream_stack:
|
||||
212 error [ '/opt/node/lib/node_modules/npm/node_modules/fstream/lib/writer.js:308:19',
|
||||
212 error '/opt/node/lib/node_modules/npm/node_modules/graceful-fs/polyfills.js:143:7',
|
||||
212 error 'Object.oncomplete (evalmachine.<anonymous>:107:15)' ] }
|
||||
213 error Please try running this command again as root/Administrator.
|
||||
214 error System Linux 2.6.32-358.el6.x86_64
|
||||
215 error command "/opt/node/bin/node" "/opt/node/bin/npm" "install"
|
||||
216 error cwd /mnt/hgfs/jumpserver/websocket
|
||||
217 error node -v v0.10.33
|
||||
218 error npm -v 1.4.28
|
||||
219 error path /mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json
|
||||
220 error fstream_path /mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json
|
||||
221 error fstream_type File
|
||||
222 error fstream_class FileWriter
|
||||
223 error fstream_finish_call chown
|
||||
224 error code EPERM
|
||||
225 error errno 50
|
||||
226 error stack Error: EPERM, chown '/mnt/hgfs/jumpserver/websocket/node_modules/node-tail/package.json'
|
||||
227 error fstream_stack /opt/node/lib/node_modules/npm/node_modules/fstream/lib/writer.js:308:19
|
||||
227 error fstream_stack /opt/node/lib/node_modules/npm/node_modules/graceful-fs/polyfills.js:143:7
|
||||
227 error fstream_stack Object.oncomplete (evalmachine.<anonymous>:107:15)
|
||||
228 verbose exit [ 50, true ]
|
Loading…
Reference in New Issue