mirror of
https://github.com/openstf/stf
synced 2025-10-06 03:50:04 +02:00
Logging implemented (except filtering).
Automatically enable/disable scroll lock based on the scrollbar position.
This commit is contained in:
parent
5be2b8f7d5
commit
1c89235267
9 changed files with 225 additions and 86 deletions
|
@ -28,7 +28,8 @@
|
|||
"angular-growl-v2": "JanStevens/angular-growl-2#~0.6.0",
|
||||
"bluebird": "~1.2.4",
|
||||
"angular-tree-control": "~0.1.5",
|
||||
"angular-loading-bar": "~0.4.2"
|
||||
"angular-loading-bar": "~0.4.2",
|
||||
"underscore.string": "~2.3.3"
|
||||
},
|
||||
"private": true,
|
||||
"resolutions": {
|
||||
|
|
|
@ -3,5 +3,4 @@ require('./logcat-table.css')
|
|||
module.exports = angular.module('stf.logcat-table', [
|
||||
|
||||
])
|
||||
.value('logcatAutoScroll', true)
|
||||
.directive('logcatTable', require('./logcat-table-directive'))
|
||||
|
|
|
@ -1,14 +1,39 @@
|
|||
var _ = require('lodash')
|
||||
|
||||
module.exports = function logcatTableDirective($rootScope, $timeout, logcatAutoScroll) {
|
||||
module.exports = function logcatTableDirective($rootScope, $timeout, LogcatService) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
replace: true,
|
||||
template: require('./logcat-table.jade'),
|
||||
link: function (scope, element, attrs) {
|
||||
var autoScroll = true
|
||||
var autoScrollDependingOnScrollPosition = true
|
||||
var scrollPosition = 0
|
||||
var scrollHeight = 0
|
||||
var parent = element[0]
|
||||
var body = element.find('tbody')[0]
|
||||
|
||||
LogcatService.addEntryListener = function (entry) {
|
||||
addRow(entry)
|
||||
}
|
||||
|
||||
function shouldAutoScroll() {
|
||||
if (autoScrollDependingOnScrollPosition) {
|
||||
return scrollPosition === scrollHeight
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
function scrollListener(event) {
|
||||
scrollPosition = event.target.scrollTop + event.target.clientHeight
|
||||
scrollHeight = event.target.scrollHeight
|
||||
}
|
||||
|
||||
var throttledScrollListener = _.throttle(scrollListener, 100)
|
||||
|
||||
parent.addEventListener('scroll', throttledScrollListener, false)
|
||||
|
||||
function scrollToBottom() {
|
||||
parent.scrollTop = parent.scrollHeight + 20
|
||||
$timeout(function () {
|
||||
|
@ -19,28 +44,30 @@ module.exports = function logcatTableDirective($rootScope, $timeout, logcatAutoS
|
|||
function addRow(data, batchRequest) {
|
||||
var newRow = body.insertRow(-1)
|
||||
|
||||
// newRow.insertCell(-1)
|
||||
// .appendChild($document.createTextNode(DeviceLogService.linesCounter));
|
||||
// newRow.insertCell(-1)
|
||||
// .appendChild($document.createTextNode(data.deviceName));
|
||||
// newRow.insertCell(-1)
|
||||
// .appendChild($document.createTextNode(data.levelName));
|
||||
// newRow.insertCell(-1)
|
||||
// .appendChild($document.createTextNode(data.dateFormatted));
|
||||
// if ($rootScope.platform === 'native') {
|
||||
newRow.classList.add('log-' + data.priorityLabel)
|
||||
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.pid))
|
||||
.appendChild(document.createTextNode(LogcatService.numberOfEntries))
|
||||
//newRow.insertCell(-1)
|
||||
// .appendChild(document.createTextNode(data.deviceLabel))
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.tid))
|
||||
.appendChild(document.createTextNode(data.priorityLabel))
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.app))
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.tag))
|
||||
// }
|
||||
.appendChild(document.createTextNode(data.dateLabel))
|
||||
if ($rootScope.platform === 'native') {
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.pid))
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.tid))
|
||||
//newRow.insertCell(-1)
|
||||
// .appendChild(document.createTextNode(data.app))
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.tag))
|
||||
}
|
||||
newRow.insertCell(-1)
|
||||
.appendChild(document.createTextNode(data.message))
|
||||
|
||||
if (logcatAutoScroll && !batchRequest) {
|
||||
if (autoScroll && shouldAutoScroll() && !batchRequest) {
|
||||
_.throttle(scrollToBottom, 10)()
|
||||
}
|
||||
}
|
||||
|
@ -52,41 +79,51 @@ module.exports = function logcatTableDirective($rootScope, $timeout, logcatAutoS
|
|||
body = newBody
|
||||
}
|
||||
|
||||
addRow({
|
||||
"serial": "1cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "default: setPolicyDataEnable(enabled=true)"
|
||||
})
|
||||
|
||||
for (var i = 0; i < 50; i++) {
|
||||
addRow({
|
||||
"serial": "14141cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "XXdefault: setPolicyDataEnable(enabled=true)"
|
||||
})
|
||||
scope.clearTable = function () {
|
||||
LogcatService.clear()
|
||||
clearTable()
|
||||
}
|
||||
|
||||
$timeout(function () {
|
||||
for (var i = 0; i < 10; i++) {
|
||||
addRow({
|
||||
"serial": "14141cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "XXdefault: setPolicyDataEnable(enabled=true)"
|
||||
})
|
||||
}
|
||||
}, 1000)
|
||||
scope.$on('$destroy', function () {
|
||||
parent.removeEventListener('scroll', throttledScrollListener)
|
||||
})
|
||||
|
||||
|
||||
// addRow({
|
||||
// "serial": "1cd49783",
|
||||
// "date": 1399964036.984,
|
||||
// "pid": 9246,
|
||||
// "tid": 9540,
|
||||
// "priority": 3,
|
||||
// "tag": "MobileDataStateTracker",
|
||||
// "message": "default: setPolicyDataEnable(enabled=true)"
|
||||
// })
|
||||
//
|
||||
// for (var i = 0; i < 50; i++) {
|
||||
// addRow({
|
||||
// "serial": "14141cd49783",
|
||||
// "date": 1399964036.984,
|
||||
// "pid": 9246,
|
||||
// "tid": 9540,
|
||||
// "priority": 3,
|
||||
// "tag": "MobileDataStateTracker",
|
||||
// "message": "XXdefault: setPolicyDataEnable(enabled=true)"
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// $timeout(function () {
|
||||
// for (var i = 0; i < 10; i++) {
|
||||
// addRow({
|
||||
// "serial": "14141cd49783",
|
||||
// "date": 1399964036.984,
|
||||
// "pid": 9246,
|
||||
// "tid": 9540,
|
||||
// "priority": 3,
|
||||
// "tag": "MobileDataStateTracker",
|
||||
// "message": "XXdefault: setPolicyDataEnable(enabled=true)"
|
||||
// })
|
||||
// }
|
||||
// }, 1000)
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -33,39 +33,45 @@
|
|||
/*color: rgb(48, 57, 66);*/
|
||||
}
|
||||
|
||||
.stf-logcat-table tr td:first-child {
|
||||
background: #f3f3f3;
|
||||
color: #800000;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/**
|
||||
Logging colors
|
||||
*/
|
||||
|
||||
.stf-logcat-table .log-unknown {
|
||||
.stf-logcat-table .log-Unknown {
|
||||
color: bisque;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-default,
|
||||
.stf-logcat-table .log-silent {
|
||||
.stf-logcat-table .log-Default,
|
||||
.stf-logcat-table .log-Silent {
|
||||
color: darkolivegreen;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-verbose {
|
||||
.stf-logcat-table .log-Verbose {
|
||||
color: blueviolet;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-debug {
|
||||
color: rgb(48, 57, 66);
|
||||
.stf-logcat-table .log-Debug {
|
||||
color: #020c7d;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-info {
|
||||
color: blue;
|
||||
.stf-logcat-table .log-Info {
|
||||
color: #177d1c;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-warn {
|
||||
.stf-logcat-table .log-Warn {
|
||||
color: coral;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-error {
|
||||
.stf-logcat-table .log-Error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.stf-logcat-table .log-fatal {
|
||||
.stf-logcat-table .log-Fatal {
|
||||
color: darkcyan;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.stf-logcat-table.force-gpu
|
||||
table.console-message-text.tableX.table-condensedX.selectableX
|
||||
table.console-message-text.tableX.table-condensed.selectable
|
||||
tbody
|
||||
|
|
|
@ -1,11 +1,56 @@
|
|||
var _ = require('lodash')
|
||||
var _s = require('underscore.string')
|
||||
|
||||
module.exports = function LogcatServiceFactory(socket) {
|
||||
var LogcatService = {}
|
||||
module.exports = function LogcatServiceFactory(socket, DeviceService) {
|
||||
var service = {}
|
||||
|
||||
LogcatService.entries = []
|
||||
service.started = false
|
||||
|
||||
LogcatService.logLevels = [
|
||||
service.maxBuffer = 5000
|
||||
|
||||
service.numberOfEntries = 0
|
||||
|
||||
service.filters = {
|
||||
numberOfEntries: 0,
|
||||
entries: [
|
||||
{
|
||||
"serial": "1cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "default:(enabled=true)"
|
||||
}
|
||||
],
|
||||
levelNumber: null,
|
||||
levelNumbers: []
|
||||
}
|
||||
|
||||
|
||||
service.entries = [
|
||||
{
|
||||
"serial": "1cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "default:(enabled=true)"
|
||||
},
|
||||
{
|
||||
"serial": "1dcvafaasfafcd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 2,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "default: setPolicyDataEnable(enabled=true)"
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
service.logLevels = [
|
||||
'UNKNOWN',
|
||||
'DEFAULT',
|
||||
'VERBOSE',
|
||||
|
@ -17,32 +62,48 @@ module.exports = function LogcatServiceFactory(socket) {
|
|||
'SILENT'
|
||||
]
|
||||
|
||||
var logLevelsLowerCase = _.map(LogcatService.logLevels, function (level) {
|
||||
var logLevelsLowerCase = _.map(service.logLevels, function (level) {
|
||||
return level.toLowerCase()
|
||||
})
|
||||
|
||||
var logLevelsCapitalized = _.map(logLevelsLowerCase, function (level) {
|
||||
//return _.capitalize(level)
|
||||
return _s.capitalize(level)
|
||||
})
|
||||
|
||||
for (var i = 2; i < 8; ++i) {
|
||||
service.filters.levelNumbers.push({number: i, name: logLevelsCapitalized[i]})
|
||||
}
|
||||
|
||||
function enhanceEntry(data) {
|
||||
var date = new Date(data.date)
|
||||
// data.dateFormatted = _.pad(date.getHours(), 2, '0') + ':' +
|
||||
// _.pad(date.getMinutes(), 2, '0') + ':' +
|
||||
// _.pad(date.getSeconds(), 2, '0') + '.' +
|
||||
// _.pad(date.getMilliseconds(), 3, '0')
|
||||
var date = new Date(data.date * 1000)
|
||||
data.dateLabel = _s.pad(date.getHours(), 2, '0') + ':' +
|
||||
_s.pad(date.getMinutes(), 2, '0') + ':' +
|
||||
_s.pad(date.getSeconds(), 2, '0') + '.' +
|
||||
_s.pad(date.getMilliseconds(), 3, '0')
|
||||
|
||||
data.deviceLabel = 'Android'
|
||||
|
||||
data.priorityLabel = logLevelsCapitalized[data.priority]
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
socket.on('logcat.entry', function (data) {
|
||||
LogcatService.entries.push(enhanceEntry(data))
|
||||
service.numberOfEntries++
|
||||
|
||||
// console.log(enhanceEntry(data))
|
||||
service.entries.push(enhanceEntry(data))
|
||||
|
||||
if (true) {
|
||||
service.addEntryListener(data)
|
||||
}
|
||||
})
|
||||
|
||||
LogcatService.clear = function () {
|
||||
LogcatService.entries = []
|
||||
service.clear = function () {
|
||||
service.numberOfEntries = 0
|
||||
service.entries = []
|
||||
}
|
||||
|
||||
return LogcatService
|
||||
return service
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,16 @@
|
|||
.enter-fade {
|
||||
-webkit-transition: 1s linear opacity;
|
||||
-moz-transition: 1s linear opacity;
|
||||
-o-transition: 1s linear opacity;
|
||||
transition: 1s linear opacity;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.enter-fade.enter-fade-active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
device-screen canvas {
|
||||
transition: width 100ms linear, -webkit-transform 250ms ease-in-out;
|
||||
-webkit-transform-origin: 50% 50%;
|
||||
|
|
|
@ -4,22 +4,44 @@ module.exports = function LogsCtrl($scope, LogcatService) {
|
|||
|
||||
$scope.logEntries = LogcatService.entries
|
||||
|
||||
$scope.filters = LogcatService.filters
|
||||
|
||||
$scope.started = LogcatService.started
|
||||
|
||||
|
||||
|
||||
|
||||
$scope.$watch('started', function (newValue, oldValue) {
|
||||
if (newValue !== oldValue) {
|
||||
|
||||
LogcatService.started = newValue
|
||||
if (newValue) {
|
||||
$scope.control.startLogcat(filters).then(function (result) {
|
||||
|
||||
})
|
||||
} else {
|
||||
$scope.control.stopLogcat()
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
$scope.$on('$destroy', function () {
|
||||
// $scope.control.stopLogcat()
|
||||
})
|
||||
|
||||
$scope.clear = function () {
|
||||
LogcatService.clear()
|
||||
}
|
||||
|
||||
$scope.addFastRow = function (val) {
|
||||
var e = {
|
||||
"serial": "1cd49783",
|
||||
"date": 1399964036.984,
|
||||
"pid": 9246,
|
||||
"tid": 9540,
|
||||
"priority": 3,
|
||||
"tag": "MobileDataStateTracker",
|
||||
"message": "default: setPolicyDataEnable(enabled=true)"
|
||||
}
|
||||
|
||||
//console.log(val)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
select(ng-model='filtering.deviceName', ng-options='d for d in filtering.devicesList')
|
||||
option(value='') {{"Device"|translate}}
|
||||
td(width='6%')
|
||||
select(ng-model='filtering.levelNumber', ng-options='l.name for l in filtering.levelNumbers')
|
||||
select(ng-model='filters.levelNumber', ng-options='l.name for l in filters.levelNumbers')
|
||||
option(value='') {{"Level"|translate}}
|
||||
td(width='10%')
|
||||
input(ng-model='filtering.date', type='text', placeholder='{{"Time"|translate}}')
|
||||
|
@ -49,18 +49,18 @@
|
|||
input(ng-model='filtering.pid', type='text', placeholder='{{"PID"|translate}}')
|
||||
td(width='8%', ng-if='$root.platform == "native"')
|
||||
input(ng-model='filtering.tid', type='text', placeholder='{{"TID"|translate}}')
|
||||
td(width='14%', ng-if='$root.platform == "native"')
|
||||
//td(width='14%', ng-if='$root.platform == "native"')
|
||||
input(ng-model='filtering.app', type='text', placeholder='{{"App"|translate}}')
|
||||
td(width='14%', ng-if='$root.platform == "native"')
|
||||
input(ng-model='filtering.tag', type='text', placeholder='{{"Tag"|translate}}')
|
||||
td(width='40%')
|
||||
input(ng-model='filtering.message', type='text', placeholder='{{"Text"|translate}}')
|
||||
td(width='0')
|
||||
button(ng-click='clear()', ng-disabled='false', title='{{"Clear"|translate}}').btn.btn-xs.btn-danger-outline
|
||||
button(ng-click='clearTable()', ng-disabled='false', title='{{"Clear"|translate}}').btn.btn-xs.btn-danger-outline
|
||||
i.fa.fa-trash-o
|
||||
span(translate) Clear
|
||||
|
||||
logcat-table
|
||||
logcat-table(add-row='lastEntry')
|
||||
//#logcatParent.force-gpu
|
||||
table#logcatTable.console-message-text.tableX.table-condensedX.selectableX
|
||||
//thead
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue