request-logs.js
3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* ADOBE CONFIDENTIAL
*
* Copyright 2016 Adobe Systems Incorporated
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any. The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and may be covered by U.S. and Foreign Patents,
* patents in process, and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
*/
/* globals Granite */
(function(window, document, $, i18n, dcc) {
'use strict';
var POLLING_INTERVAL = 1000; // ms
var LOGS_ACTIVATOR = '.screens-dcc-actions-Device-logs-activator';
var LOGS_SELECTOR = '.screens-dashboard-DeviceActivityTile';
var LOGS_CLASS = 'screens-DeviceLogs';
var ui = $(window).adaptTo('foundation-ui');
function reloadUI() {
var foundationContent = $('.foundation-content').adaptTo('foundation-content');
return foundationContent.refresh();
}
function getTimestamp(html) {
var timestamp = $('.' + LOGS_CLASS + ' time', html).attr('datetime');
return timestamp ? new Date(parseInt(timestamp, 10)) : null;
}
function readLogs(deviceProfilePath) {
var url = Granite.HTTP.externalize(deviceProfilePath + '/logs/error.log/_jcr_content.json');
return $.ajax(url);
}
function pollLogs(deviceProfilePath, timestamp) {
var logsPollTimeout;
var deferred = $.Deferred(); // eslint-disable-line new-cap
var handleLogs = function() {
var checkLogs = function(data) {
var newTimestamp = data['jcr:lastModified'] ? new Date(data['jcr:lastModified']) : null;
if (newTimestamp && (timestamp ? timestamp.getTime() : 0) < newTimestamp.getTime()) {
deferred.resolve(newTimestamp);
}
else {
handleLogs();
}
};
window.clearTimeout(logsPollTimeout);
logsPollTimeout = window.setTimeout(function() {
readLogs(deviceProfilePath)
.then(checkLogs)
.fail(handleLogs);
}, POLLING_INTERVAL);
};
handleLogs();
return deferred.promise();
}
function requestLogs(deviceId) {
ui.wait($(LOGS_SELECTOR).get(0));
dcc.playerCommands.sendCommandToDevice(deviceId, dcc.playerCommands.COMMANDS.REQUEST_LOGS)
.then(function(deviceData) {
return pollLogs(deviceData.deviceProfilePath, getTimestamp());
})
.then(reloadUI);
}
$(document).on('click', LOGS_ACTIVATOR, function(ev) {
var $device = $(ev.currentTarget).closest('.screens-Device');
var deviceId = $device.find('[data-device-id]').data('deviceId');
if (!deviceId) {
return;
}
requestLogs(deviceId);
});
}(window, document, Granite.$, Granite.I18n, window.CQ.screens.dcc));