|
@@ -20,6 +20,7 @@ import re
|
|
|
import time
|
|
import time
|
|
|
import logging
|
|
import logging
|
|
|
import string
|
|
import string
|
|
|
|
|
+import urlparse
|
|
|
from urllib import quote_plus
|
|
from urllib import quote_plus
|
|
|
from lxml import html
|
|
from lxml import html
|
|
|
|
|
|
|
@@ -30,11 +31,13 @@ from django.core.urlresolvers import reverse
|
|
|
|
|
|
|
|
from desktop.log.access import access_warn, access_log_level
|
|
from desktop.log.access import access_warn, access_log_level
|
|
|
from desktop.lib.rest.http_client import RestException
|
|
from desktop.lib.rest.http_client import RestException
|
|
|
|
|
+from desktop.lib.rest.resource import Resource
|
|
|
from desktop.lib.django_util import render_json, render, copy_query_dict, encode_json_for_js
|
|
from desktop.lib.django_util import render_json, render, copy_query_dict, encode_json_for_js
|
|
|
from desktop.lib.exceptions import MessageException
|
|
from desktop.lib.exceptions import MessageException
|
|
|
from desktop.lib.exceptions_renderable import PopupException
|
|
from desktop.lib.exceptions_renderable import PopupException
|
|
|
from desktop.views import register_status_bar_view
|
|
from desktop.views import register_status_bar_view
|
|
|
from hadoop.api.jobtracker.ttypes import ThriftJobPriority, TaskTrackerNotFoundException, ThriftJobState
|
|
from hadoop.api.jobtracker.ttypes import ThriftJobPriority, TaskTrackerNotFoundException, ThriftJobState
|
|
|
|
|
+from hadoop.yarn.clients import get_log_client
|
|
|
|
|
|
|
|
from jobbrowser import conf
|
|
from jobbrowser import conf
|
|
|
from jobbrowser.api import get_api, ApplicationNotRunning
|
|
from jobbrowser.api import get_api, ApplicationNotRunning
|
|
@@ -233,11 +236,15 @@ def job_attempt_logs_json(request, job, attempt_index=0, name='syslog', offset=0
|
|
|
raise KeyError(_("Cannot find job attempt '%(id)s'.") % {'id': job.jobId}, e)
|
|
raise KeyError(_("Cannot find job attempt '%(id)s'.") % {'id': job.jobId}, e)
|
|
|
|
|
|
|
|
link = '/%s/' % name
|
|
link = '/%s/' % name
|
|
|
|
|
+ params = {}
|
|
|
if offset and int(offset) >= 0:
|
|
if offset and int(offset) >= 0:
|
|
|
- link += '?start=%s' % offset
|
|
|
|
|
|
|
+ params['start'] = offset
|
|
|
|
|
+
|
|
|
|
|
+ root = Resource(get_log_client(log_link), urlparse.urlsplit(log_link)[2])
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
- log = html.parse(log_link + link).xpath('/html/body/table/tbody/tr/td[2]')[0].text_content()
|
|
|
|
|
|
|
+ response = root.get(link, params=params)
|
|
|
|
|
+ log = html.fromstring(response).xpath('/html/body/table/tbody/tr/td[2]')[0].text_content()
|
|
|
except Exception, e:
|
|
except Exception, e:
|
|
|
log = _('Failed to retrieve log: %s') % e
|
|
log = _('Failed to retrieve log: %s') % e
|
|
|
|
|
|