diff --git a/Dockerfile b/Dockerfile index 5c89844..59fd7f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,8 +5,8 @@ RUN apk add --no-cache python py-pip grep gawk RUN mkdir /tailon COPY run.sh /tailon/run.sh RUN chmod +x /tailon/run.sh -COPY tailon-1.0.0 /tailon/tailon-1.0.0 -RUN pip install /tailon/tailon-1.0.0 +COPY tailon-1.1.1 /tailon/tailon-1.1.1 +RUN pip install /tailon/tailon-1.1.1 VOLUME ["/data"] diff --git a/tailon-1.0.0/config.yaml b/tailon-1.0.0/config.yaml deleted file mode 100644 index 8d24fef..0000000 --- a/tailon-1.0.0/config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -bind: 0.0.0.0:8080 # address and port to bind on -allow-transfers: true # allow file downloads -relative-root: /tailon/ # web app root path (default: '') -commands: [tail, grep, awk] # allowed commands - -files: - - '/var/log/messages' - - '/var/log/nginx/*.log' - - '/var/log/xorg.[0-10].log' - - 'cron': # sub-section - - '/var/log/cron*' diff --git a/tailon-1.0.0/docs/changelog.rst b/tailon-1.0.0/docs/changelog.rst deleted file mode 100644 index 508026d..0000000 --- a/tailon-1.0.0/docs/changelog.rst +++ /dev/null @@ -1,10 +0,0 @@ -Changelog ---------- - -1.0.0 -=========== - -- Split wtee_ into a separate project. - - -.. _wtee: https://github.com/gvalkov/wtee diff --git a/tailon-1.0.0/tailon/__init__.py b/tailon-1.0.0/tailon/__init__.py deleted file mode 100644 index 1f356cc..0000000 --- a/tailon-1.0.0/tailon/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '1.0.0' diff --git a/tailon-1.0.0/tailon/assets/gen/Main.js.map b/tailon-1.0.0/tailon/assets/gen/Main.js.map deleted file mode 100644 index ad64bae..0000000 --- a/tailon-1.0.0/tailon/assets/gen/Main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Main.js","sourceRoot":"","sources":["../js/Logview.ts","../js/Backend.ts","../js/Utils.ts","../js/Settings.ts","../js/Main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tailon-1.0.0/.gitignore b/tailon-1.1.1/.gitignore similarity index 100% rename from tailon-1.0.0/.gitignore rename to tailon-1.1.1/.gitignore diff --git a/tailon-1.0.0/LICENSE b/tailon-1.1.1/LICENSE similarity index 100% rename from tailon-1.0.0/LICENSE rename to tailon-1.1.1/LICENSE diff --git a/tailon-1.0.0/MANIFEST.in b/tailon-1.1.1/MANIFEST.in similarity index 100% rename from tailon-1.0.0/MANIFEST.in rename to tailon-1.1.1/MANIFEST.in diff --git a/tailon-1.0.0/README.rst b/tailon-1.1.1/README.rst similarity index 100% rename from tailon-1.0.0/README.rst rename to tailon-1.1.1/README.rst diff --git a/tailon-1.0.0/bower.json b/tailon-1.1.1/bower.json similarity index 100% rename from tailon-1.0.0/bower.json rename to tailon-1.1.1/bower.json diff --git a/tailon-1.1.1/config.yaml b/tailon-1.1.1/config.yaml new file mode 100644 index 0000000..745b57c --- /dev/null +++ b/tailon-1.1.1/config.yaml @@ -0,0 +1,15 @@ +bind: 0.0.0.0:8080 # address and port to bind on +allow-transfers: true # allow log file downloads +follow-names: false # allow tailing of not-yet-existent files +relative-root: /tailon # web app root path (default: '') +commands: [tail, grep] # allowed commands +tail-lines: 10 # number of lines to tail initially +wrap-lines: true # initial line-wrapping state + +files: + - '/var/log/messages' + - '/var/log/nginx/*.log' + - '/var/log/xorg.[0-10].log' + - '/var/log/nginx/' # all files in this directory + - 'cron': # it's possible to add sub-sections + - '/var/log/cron*' diff --git a/tailon-1.0.0/docs/Makefile b/tailon-1.1.1/docs/Makefile similarity index 100% rename from tailon-1.0.0/docs/Makefile rename to tailon-1.1.1/docs/Makefile diff --git a/tailon-1.0.0/docs/awk.png b/tailon-1.1.1/docs/awk.png similarity index 100% rename from tailon-1.0.0/docs/awk.png rename to tailon-1.1.1/docs/awk.png diff --git a/tailon-1.1.1/docs/changelog.rst b/tailon-1.1.1/docs/changelog.rst new file mode 100644 index 0000000..0ef5691 --- /dev/null +++ b/tailon-1.1.1/docs/changelog.rst @@ -0,0 +1,33 @@ +Changelog +--------- + +1.1.0 (Sep 17, 2016) +==================== + +- Add the ability to set the initial file, command and command script through + the query string. For example: + + http://localhost:8081/?file=logs/nginx/error.log&cmd=grep&script=GET + + If a file or command does not exist, tailon will use the first in the list + (which is the default behavior). + +- Add the ``-F/--follow-names`` command-line switch and the ``follow-names`` + config file option. This option instructs tailon to tail files which do not + exist yet. It is equivalent to running ``tail -F`` instead of the ``tail -f``. + +- Fix ``tail-lines`` not being read from the configuration file. + +1.0.0 (Sep 10, 2016) +==================== + +- Split wtee_ into a separate project. + + +0.1.0 - 0.6.0 +============= + +- Older versions for which a changelog was not kept. + + +.. _wtee: https://github.com/gvalkov/wtee diff --git a/tailon-1.0.0/docs/conf.py b/tailon-1.1.1/docs/conf.py similarity index 99% rename from tailon-1.0.0/docs/conf.py rename to tailon-1.1.1/docs/conf.py index 36d2d49..22d9dc9 100644 --- a/tailon-1.0.0/docs/conf.py +++ b/tailon-1.1.1/docs/conf.py @@ -25,7 +25,7 @@ project = u'tailon' copyright = u'2013-2016, Georgi Valkov' -release = '1.0.0' +release = '1.1.1' version = release exclude_patterns = ['_build'] diff --git a/tailon-1.0.0/docs/development.rst b/tailon-1.1.1/docs/development.rst similarity index 100% rename from tailon-1.0.0/docs/development.rst rename to tailon-1.1.1/docs/development.rst diff --git a/tailon-1.0.0/docs/grep.png b/tailon-1.1.1/docs/grep.png similarity index 100% rename from tailon-1.0.0/docs/grep.png rename to tailon-1.1.1/docs/grep.png diff --git a/tailon-1.0.0/docs/index.rst b/tailon-1.1.1/docs/index.rst similarity index 96% rename from tailon-1.0.0/docs/index.rst rename to tailon-1.1.1/docs/index.rst index 3f618f4..acd7518 100644 --- a/tailon-1.0.0/docs/index.rst +++ b/tailon-1.1.1/docs/index.rst @@ -75,7 +75,8 @@ Tailon's server-side functionality is summarized entirely in its help message:: Usage: tailon [-c path] [-f path [path ...]] [-h] [-d] [-v] [--output-encoding enc] [--input-encoding enc] [-b addr:port] - [-r path] [-a] [-t num] [-m [cmd [cmd ...]]] [--no-wrap-lines] + [-r path] [-a] [-f] [-t num] [-m [cmd [cmd ...]]] + [--no-wrap-lines] Tailon is a web app for looking at and searching through log files. @@ -94,6 +95,7 @@ Tailon's server-side functionality is summarized entirely in its help message:: -b, --bind addr:port listen on the specified address and port -r, --relative-root path web app root path -a, --allow-transfers allow log file downloads + -F, --follow-names allow tailing of not-yet-existent files -t, --tail-lines num number of lines to tail initially -m, --commands [cmd [cmd ...]] allowed commands (default: tail grep awk) @@ -103,6 +105,7 @@ Tailon's server-side functionality is summarized entirely in its help message:: Example config file: bind: 0.0.0.0:8080 # address and port to bind on allow-transfers: true # allow log file downloads + follow-names: false # allow tailing of not-yet-existent files relative-root: /tailon # web app root path (default: '') commands: [tail, grep] # allowed commands tail-lines: 10 # number of lines to tail initially @@ -122,6 +125,7 @@ Tailon's server-side functionality is summarized entirely in its help message:: tailon -f /var/log/ tailon -c config.yaml -d + Please note that if the file list includes wildcard characters, they will be expanded only once at server-start time. diff --git a/tailon-1.0.0/docs/tail.png b/tailon-1.1.1/docs/tail.png similarity index 100% rename from tailon-1.0.0/docs/tail.png rename to tailon-1.1.1/docs/tail.png diff --git a/tailon-1.0.0/package.json b/tailon-1.1.1/package.json similarity index 100% rename from tailon-1.0.0/package.json rename to tailon-1.1.1/package.json diff --git a/tailon-1.0.0/requirements-dev.txt b/tailon-1.1.1/requirements-dev.txt similarity index 100% rename from tailon-1.0.0/requirements-dev.txt rename to tailon-1.1.1/requirements-dev.txt diff --git a/tailon-1.0.0/setup.cfg b/tailon-1.1.1/setup.cfg similarity index 92% rename from tailon-1.0.0/setup.cfg rename to tailon-1.1.1/setup.cfg index 66892fd..e208387 100644 --- a/tailon-1.0.0/setup.cfg +++ b/tailon-1.1.1/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.0.0 +current_version = 1.1.1 message = Bump version: {current_version} -> {new_version} commit = True tag = True diff --git a/tailon-1.0.0/setup.py b/tailon-1.1.1/setup.py similarity index 97% rename from tailon-1.0.0/setup.py rename to tailon-1.1.1/setup.py index e64cfd5..591ff4b 100644 --- a/tailon-1.0.0/setup.py +++ b/tailon-1.1.1/setup.py @@ -19,7 +19,7 @@ kw = { 'name': 'tailon', - 'version': '1.0.0', + 'version': '1.1.1', 'description': 'Webapp for looking at and searching through log files', 'long_description': open('README.rst').read(), 'author': 'Georgi Valkov', diff --git a/tailon-1.1.1/tailon/__init__.py b/tailon-1.1.1/tailon/__init__.py new file mode 100644 index 0000000..b3ddbc4 --- /dev/null +++ b/tailon-1.1.1/tailon/__init__.py @@ -0,0 +1 @@ +__version__ = '1.1.1' diff --git a/tailon-1.0.0/tailon/__main__.py b/tailon-1.1.1/tailon/__main__.py similarity index 100% rename from tailon-1.0.0/tailon/__main__.py rename to tailon-1.1.1/tailon/__main__.py diff --git a/tailon-1.0.0/tailon/argparse.py b/tailon-1.1.1/tailon/argparse.py similarity index 100% rename from tailon-1.0.0/tailon/argparse.py rename to tailon-1.1.1/tailon/argparse.py diff --git a/tailon-1.0.0/tailon/assets/favicon.ico b/tailon-1.1.1/tailon/assets/favicon.ico similarity index 100% rename from tailon-1.0.0/tailon/assets/favicon.ico rename to tailon-1.1.1/tailon/assets/favicon.ico diff --git a/tailon-1.0.0/tailon/assets/fonts/.keep b/tailon-1.1.1/tailon/assets/fonts/.keep similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/.keep rename to tailon-1.1.1/tailon/assets/fonts/.keep diff --git a/tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.eot b/tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.eot similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.eot rename to tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.eot diff --git a/tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.svg b/tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.svg similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.svg rename to tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.svg diff --git a/tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.ttf b/tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.ttf similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.ttf rename to tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.ttf diff --git a/tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.woff b/tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.woff similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.woff rename to tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.woff diff --git a/tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.woff2 b/tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.woff2 similarity index 100% rename from tailon-1.0.0/tailon/assets/fonts/fontawesome-webfont.woff2 rename to tailon-1.1.1/tailon/assets/fonts/fontawesome-webfont.woff2 diff --git a/tailon-1.0.0/tailon/assets/gen/.keep b/tailon-1.1.1/tailon/assets/gen/.keep similarity index 100% rename from tailon-1.0.0/tailon/assets/gen/.keep rename to tailon-1.1.1/tailon/assets/gen/.keep diff --git a/tailon-1.0.0/tailon/assets/gen/3rdparty.css b/tailon-1.1.1/tailon/assets/gen/3rdparty.css similarity index 100% rename from tailon-1.0.0/tailon/assets/gen/3rdparty.css rename to tailon-1.1.1/tailon/assets/gen/3rdparty.css diff --git a/tailon-1.0.0/tailon/assets/gen/3rdparty.js b/tailon-1.1.1/tailon/assets/gen/3rdparty.js similarity index 100% rename from tailon-1.0.0/tailon/assets/gen/3rdparty.js rename to tailon-1.1.1/tailon/assets/gen/3rdparty.js diff --git a/tailon-1.0.0/tailon/assets/gen/Main.js b/tailon-1.1.1/tailon/assets/gen/Main.js similarity index 91% rename from tailon-1.0.0/tailon/assets/gen/Main.js rename to tailon-1.1.1/tailon/assets/gen/Main.js index 4f4eb33..ae9541e 100644 --- a/tailon-1.0.0/tailon/assets/gen/Main.js +++ b/tailon-1.1.1/tailon/assets/gen/Main.js @@ -234,6 +234,22 @@ var Utils; }); } Utils.escapeHtml = escapeHtml; + function parseQueryString(str) { + var res = {}; + str.substr(1).split('&').forEach(function (item) { + var el = item.split("="); + var key = el[0]; + var value = el[1] && decodeURIComponent(el[1]); + if (key in res) { + res[key].push(value); + } + else { + res[key] = [value]; + } + }); + return res; + } + Utils.parseQueryString = parseQueryString; var Signal = (function () { function Signal() { this.listeners = []; @@ -366,7 +382,7 @@ function onResize() { $(window).resize(onResize); onResize(); var FileSelect = (function () { - function FileSelect(selector) { + function FileSelect(selector, default_file) { var _this = this; this.refreshSelect = function () { var updateValues = _this.updateValues; @@ -420,9 +436,11 @@ var FileSelect = (function () { optgroupField: 'group' })[0].selectize; this.updateValues(); - var firstValue = Object.keys(this.select.options)[0]; - this.select.setValue(firstValue); - settings.set('currentFile', firstValue); + if (!default_file || !(default_file in this.select.options)) { + default_file = Object.keys(this.select.options)[0]; + } + this.select.setValue(default_file); + settings.set('currentFile', default_file); // TODO: This is an ugly work around for not being able to figure out // how the selectize focus event works. // this.select.on('focus', this.onFocus); @@ -435,7 +453,7 @@ var FileSelect = (function () { return FileSelect; }()); var CommandSelect = (function () { - function CommandSelect(selector) { + function CommandSelect(selector, default_cmd) { this.$container = $(selector); var all_commands = window.clientConfig['commands']; all_commands = all_commands.map(function (x) { @@ -448,9 +466,11 @@ var CommandSelect = (function () { labelField: 'item', valueField: 'item' })[0].selectize; - var firstValue = Object.keys(this.select.options)[0]; - this.select.setValue(firstValue); - settings.set('currentCommand', firstValue); + if (!default_cmd || !(default_cmd in this.select.options)) { + default_cmd = Object.keys(this.select.options)[0]; + } + this.select.setValue(default_cmd); + settings.set('currentCommand', default_cmd); this.select.on('change', this.onChange); } CommandSelect.prototype.onChange = function (value) { @@ -507,7 +527,7 @@ var MinimizedActionBar = (function () { return MinimizedActionBar; }()); var ScriptInput = (function () { - function ScriptInput(selector) { + function ScriptInput(selector, default_script) { var _this = this; this.onCommandChange = function (command) { if (command in _this.placeholders) { @@ -540,7 +560,12 @@ var ScriptInput = (function () { 'sed': 's/.*/&/', 'grep': '.*' }; - this.onCommandChange(settings.get('currentCommand')); + var current_cmd = settings.get('currentCommand'); + // TODO: This needs to be more flexible. + if (default_script && current_cmd in this.placeholders) { + this.placeholders[current_cmd] = default_script; + } + this.onCommandChange(current_cmd); this.$container.on('change', this.onChange); settings.onChange('currentCommand', this.onCommandChange.bind(this)); } @@ -581,11 +606,15 @@ function changeFileModeScript() { backend.sendMessage(message, true); logview.clearLines(); } +var query_string = Utils.parseQueryString(location.search); +var default_file = 'file' in query_string ? query_string['file'][0] : null; +var default_cmd = 'cmd' in query_string ? query_string['cmd'][0] : null; +var default_script = 'script' in query_string ? query_string['script'][0] : null; var m_action_bar = new MinimizedActionBar('#minimized-action-bar'); var action_bar = new ActionBar('#action-bar'); -var cmd_select = new CommandSelect('#command-select select'); -var file_select = new FileSelect('#file-select select'); -var script_input = new ScriptInput('#script-input'); +var cmd_select = new CommandSelect('#command-select select', default_cmd); +var file_select = new FileSelect('#file-select select', default_file); +var script_input = new ScriptInput('#script-input', default_script); settings.onChange('currentFile', changeFileModeScript); settings.onChange('currentCommand', changeFileModeScript); settings.onChange('currentScript', changeFileModeScript); diff --git a/tailon-1.1.1/tailon/assets/gen/Main.js.map b/tailon-1.1.1/tailon/assets/gen/Main.js.map new file mode 100644 index 0000000..589c30b --- /dev/null +++ b/tailon-1.1.1/tailon/assets/gen/Main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Main.js","sourceRoot":"","sources":["../js/Logview.ts","../js/Backend.ts","../js/Utils.ts","../js/Settings.ts","../js/Main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tailon-1.0.0/tailon/assets/gen/Main.min.js b/tailon-1.1.1/tailon/assets/gen/Main.min.js similarity index 73% rename from tailon-1.0.0/tailon/assets/gen/Main.min.js rename to tailon-1.1.1/tailon/assets/gen/Main.min.js index c3a45e4..4324dbd 100644 --- a/tailon-1.0.0/tailon/assets/gen/Main.min.js +++ b/tailon-1.1.1/tailon/assets/gen/Main.min.js @@ -20,19 +20,24 @@ return state.text;var size=formatBytes($(state.element).data('size'));return'":">","/":'/'};function escapeHtml(str){return String(str).replace(/[&<>\/]/g,function(s){return escape_entity_map[s];});} -Utils.escapeHtml=escapeHtml;var Signal=(function(){function Signal(){this.listeners=[];} +Utils.escapeHtml=escapeHtml;function parseQueryString(str){var res={};str.substr(1).split('&').forEach(function(item){var el=item.split("=");var key=el[0];var value=el[1]&&decodeURIComponent(el[1]);if(key in res){res[key].push(value);} +else{res[key]=[value];}});return res;} +Utils.parseQueryString=parseQueryString;var Signal=(function(){function Signal(){this.listeners=[];} Signal.prototype.addCallback=function(callback){this.listeners.push(callback);};Signal.prototype.removeObserver=function(observer){this.listeners.splice(this.listeners.indexOf(observer),1);};Signal.prototype.trigger=function(data){this.listeners.forEach(function(callback){callback(data);});};return Signal;}());Utils.Signal=Signal;})(Utils||(Utils={}));var Settings;(function(Settings_1){var Settings=(function(){function Settings(settings){this.settings=settings;this.signals={};var keys=Object.keys(this.settings);for(var i=0;i1);var groups=Object.keys(result);for(var i=0;i1);var groups=Object.keys(result);for(var i=0;i('currentFile', firstValue); + + if (! default_file || ! (default_file in this.select.options)) { + default_file = Object.keys(this.select.options)[0]; + } + + this.select.setValue(default_file); + settings.set('currentFile', default_file); // TODO: This is an ugly work around for not being able to figure out // how the selectize focus event works. @@ -216,7 +220,7 @@ class CommandSelect { $container: JQuery; select: any; - constructor(selector: string) { + constructor(selector: string, default_cmd?: string) { this.$container = $(selector); let all_commands = window.clientConfig['commands']; @@ -232,9 +236,12 @@ class CommandSelect { valueField: 'item', })[0].selectize; - var firstValue = Object.keys(this.select.options)[0]; - this.select.setValue(firstValue); - settings.set('currentCommand', firstValue); + if (! default_cmd || ! (default_cmd in this.select.options)) { + default_cmd = Object.keys(this.select.options)[0]; + } + + this.select.setValue(default_cmd); + settings.set('currentCommand', default_cmd); this.select.on('change', this.onChange); } @@ -308,7 +315,7 @@ class ScriptInput { $input_el: JQuery; placeholders: Object; - constructor(selector: string) { + constructor(selector: string, default_script?: string) { this.$container = $(selector); this.$input_el = $('#script-input input'); this.placeholders = { @@ -317,7 +324,14 @@ class ScriptInput { 'grep': '.*' } - this.onCommandChange(settings.get('currentCommand')); + let current_cmd: string = settings.get('currentCommand'); + + // TODO: This needs to be more flexible. + if (default_script && current_cmd in this.placeholders) { + this.placeholders[current_cmd] = default_script; + } + + this.onCommandChange(current_cmd); this.$container.on('change', this.onChange); settings.onChange('currentCommand', this.onCommandChange.bind(this)); } @@ -397,12 +411,17 @@ function changeFileModeScript() { } +var query_string = Utils.parseQueryString(location.search); +var default_file = 'file' in query_string ? query_string['file'][0] : null; +var default_cmd = 'cmd' in query_string ? query_string['cmd'][0] : null; +var default_script = 'script' in query_string ? query_string['script'][0] : null; + var m_action_bar = new MinimizedActionBar('#minimized-action-bar'); var action_bar = new ActionBar('#action-bar'); -var cmd_select = new CommandSelect('#command-select select'); -var file_select = new FileSelect('#file-select select'); -var script_input = new ScriptInput('#script-input'); +var cmd_select = new CommandSelect('#command-select select', default_cmd); +var file_select = new FileSelect('#file-select select', default_file); +var script_input = new ScriptInput('#script-input', default_script); settings.onChange('currentFile', changeFileModeScript); settings.onChange('currentCommand', changeFileModeScript); diff --git a/tailon-1.0.0/tailon/assets/js/Settings.ts b/tailon-1.1.1/tailon/assets/js/Settings.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/js/Settings.ts rename to tailon-1.1.1/tailon/assets/js/Settings.ts diff --git a/tailon-1.0.0/tailon/assets/js/Utils.ts b/tailon-1.1.1/tailon/assets/js/Utils.ts similarity index 80% rename from tailon-1.0.0/tailon/assets/js/Utils.ts rename to tailon-1.1.1/tailon/assets/js/Utils.ts index 69a3c03..1ef83f8 100644 --- a/tailon-1.0.0/tailon/assets/js/Utils.ts +++ b/tailon-1.1.1/tailon/assets/js/Utils.ts @@ -40,6 +40,25 @@ module Utils { }); } + export function parseQueryString(str: string): Object { + var res = {}; + + str.substr(1).split('&').forEach(function(item) { + var el = item.split("="); + + var key = el[0]; + var value = el[1] && decodeURIComponent(el[1]); + + if (key in res) { + res[key].push(value); + } else { + res[key] = [value]; + } + }); + + return res; + } + interface Callable { (T): any; } diff --git a/tailon-1.0.0/tailon/assets/scss/base.scss b/tailon-1.1.1/tailon/assets/scss/base.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/base.scss rename to tailon-1.1.1/tailon/assets/scss/base.scss diff --git a/tailon-1.0.0/tailon/assets/scss/main.scss b/tailon-1.1.1/tailon/assets/scss/main.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/main.scss rename to tailon-1.1.1/tailon/assets/scss/main.scss diff --git a/tailon-1.0.0/tailon/assets/scss/selectize.default.scss b/tailon-1.1.1/tailon/assets/scss/selectize.default.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/selectize.default.scss rename to tailon-1.1.1/tailon/assets/scss/selectize.default.scss diff --git a/tailon-1.0.0/tailon/assets/scss/selectize.scss b/tailon-1.1.1/tailon/assets/scss/selectize.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/selectize.scss rename to tailon-1.1.1/tailon/assets/scss/selectize.scss diff --git a/tailon-1.0.0/tailon/assets/scss/utils.scss b/tailon-1.1.1/tailon/assets/scss/utils.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/utils.scss rename to tailon-1.1.1/tailon/assets/scss/utils.scss diff --git a/tailon-1.0.0/tailon/assets/scss/vars.scss b/tailon-1.1.1/tailon/assets/scss/vars.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/scss/vars.scss rename to tailon-1.1.1/tailon/assets/scss/vars.scss diff --git a/tailon-1.0.0/tailon/assets/vendor/.keep b/tailon-1.1.1/tailon/assets/vendor/.keep similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/.keep rename to tailon-1.1.1/tailon/assets/vendor/.keep diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/css/font-awesome.css b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/css/font-awesome.css similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/css/font-awesome.css rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/css/font-awesome.css diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.eot b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.eot rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.eot diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.svg b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.svg similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.svg rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.svg diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.ttf b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.ttf rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.ttf diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff2 b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff2 similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff2 rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/fonts/fontawesome-webfont.woff2 diff --git a/tailon-1.0.0/tailon/assets/vendor/components-font-awesome/scss/font-awesome.scss b/tailon-1.1.1/tailon/assets/vendor/components-font-awesome/scss/font-awesome.scss similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/components-font-awesome/scss/font-awesome.scss rename to tailon-1.1.1/tailon/assets/vendor/components-font-awesome/scss/font-awesome.scss diff --git a/tailon-1.0.0/tailon/assets/vendor/html5shiv/dist/html5shiv.js b/tailon-1.1.1/tailon/assets/vendor/html5shiv/dist/html5shiv.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/html5shiv/dist/html5shiv.js rename to tailon-1.1.1/tailon/assets/vendor/html5shiv/dist/html5shiv.js diff --git a/tailon-1.0.0/tailon/assets/vendor/jquery-typewatch/jquery.typewatch.js b/tailon-1.1.1/tailon/assets/vendor/jquery-typewatch/jquery.typewatch.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/jquery-typewatch/jquery.typewatch.js rename to tailon-1.1.1/tailon/assets/vendor/jquery-typewatch/jquery.typewatch.js diff --git a/tailon-1.0.0/tailon/assets/vendor/jquery/dist/jquery.js b/tailon-1.1.1/tailon/assets/vendor/jquery/dist/jquery.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/jquery/dist/jquery.js rename to tailon-1.1.1/tailon/assets/vendor/jquery/dist/jquery.js diff --git a/tailon-1.0.0/tailon/assets/vendor/microplugin/src/microplugin.js b/tailon-1.1.1/tailon/assets/vendor/microplugin/src/microplugin.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/microplugin/src/microplugin.js rename to tailon-1.1.1/tailon/assets/vendor/microplugin/src/microplugin.js diff --git a/tailon-1.0.0/tailon/assets/vendor/normalize-css/normalize.css b/tailon-1.1.1/tailon/assets/vendor/normalize-css/normalize.css similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/normalize-css/normalize.css rename to tailon-1.1.1/tailon/assets/vendor/normalize-css/normalize.css diff --git a/tailon-1.0.0/tailon/assets/vendor/selectize/dist/css/selectize.css b/tailon-1.1.1/tailon/assets/vendor/selectize/dist/css/selectize.css similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/selectize/dist/css/selectize.css rename to tailon-1.1.1/tailon/assets/vendor/selectize/dist/css/selectize.css diff --git a/tailon-1.0.0/tailon/assets/vendor/selectize/dist/js/selectize.js b/tailon-1.1.1/tailon/assets/vendor/selectize/dist/js/selectize.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/selectize/dist/js/selectize.js rename to tailon-1.1.1/tailon/assets/vendor/selectize/dist/js/selectize.js diff --git a/tailon-1.0.0/tailon/assets/vendor/sifter/sifter.js b/tailon-1.1.1/tailon/assets/vendor/sifter/sifter.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/sifter/sifter.js rename to tailon-1.1.1/tailon/assets/vendor/sifter/sifter.js diff --git a/tailon-1.0.0/tailon/assets/vendor/sockjs-client/dist/sockjs.js b/tailon-1.1.1/tailon/assets/vendor/sockjs-client/dist/sockjs.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/sockjs-client/dist/sockjs.js rename to tailon-1.1.1/tailon/assets/vendor/sockjs-client/dist/sockjs.js diff --git a/tailon-1.0.0/tailon/assets/vendor/spinjs/spin.js b/tailon-1.1.1/tailon/assets/vendor/spinjs/spin.js similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/spinjs/spin.js rename to tailon-1.1.1/tailon/assets/vendor/spinjs/spin.js diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/jquery.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/jquery.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/jquery.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/jquery.d.ts diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/moment-node.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/moment-node.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/moment-node.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/moment-node.d.ts diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/moment.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/moment.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/moment.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/moment.d.ts diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/selectize.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/selectize.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/selectize.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/selectize.d.ts diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/sockjs.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/sockjs.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/sockjs.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/sockjs.d.ts diff --git a/tailon-1.0.0/tailon/assets/vendor/typings/spin.d.ts b/tailon-1.1.1/tailon/assets/vendor/typings/spin.d.ts similarity index 100% rename from tailon-1.0.0/tailon/assets/vendor/typings/spin.d.ts rename to tailon-1.1.1/tailon/assets/vendor/typings/spin.d.ts diff --git a/tailon-1.0.0/tailon/commands.py b/tailon-1.1.1/tailon/commands.py similarity index 92% rename from tailon-1.0.0/tailon/commands.py rename to tailon-1.1.1/tailon/commands.py index 122bca0..af5f7a3 100644 --- a/tailon-1.0.0/tailon/commands.py +++ b/tailon-1.1.1/tailon/commands.py @@ -34,8 +34,9 @@ def first_in_path(self, *cmds): #----------------------------------------------------------------------------- class CommandControl: - def __init__(self, toolpaths): + def __init__(self, toolpaths, follow_names=False): self.toolpaths = toolpaths + self.follow_names = follow_names def awk(self, script, fn, stdout, stderr, **kw): cmd = [self.toolpaths.cmd_awk, '--sandbox', script] @@ -62,8 +63,9 @@ def sed(self, script, fn, stdout, stderr, **kw): return proc def tail(self, n, fn, stdout, stderr, **kw): - cmd = [self.toolpaths.cmd_tail, '-n', str(n), '-f', fn] - proc = process.Subprocess(cmd, stdout=stdout, stderr=stderr, **kw) + flag_follow = '-F' if self.follow_names else '-f' + cmd = [self.toolpaths.cmd_tail, '-n', str(n), flag_follow, fn] + proc = process.Subprocess(cmd, stdout=stdout, stderr=stderr, bufsize=1, **kw) log.debug('running tail %s, pid: %s', cmd, proc.proc.pid) return proc diff --git a/tailon-1.0.0/tailon/compat.py b/tailon-1.1.1/tailon/compat.py similarity index 100% rename from tailon-1.0.0/tailon/compat.py rename to tailon-1.1.1/tailon/compat.py diff --git a/tailon-1.0.0/tailon/main.py b/tailon-1.1.1/tailon/main.py similarity index 89% rename from tailon-1.0.0/tailon/main.py rename to tailon-1.1.1/tailon/main.py index 527a583..075a2c8 100644 --- a/tailon-1.0.0/tailon/main.py +++ b/tailon-1.1.1/tailon/main.py @@ -24,7 +24,7 @@ #----------------------------------------------------------------------------- # Setup Logging #----------------------------------------------------------------------------- -log = logging.getLogger('tailon') +log = logging.getLogger() ch = logging.StreamHandler() ft = logging.Formatter('[+%(relativeCreated)f][%(levelname)5s] %(message)s') @@ -66,8 +66,10 @@ def parseconfig(cfg): 'debug': raw_config.get('debug', False), 'commands': raw_config.get('commands', ['tail', 'grep', 'awk']), 'allow-transfers': raw_config.get('allow-transfers', False), + 'follow-names': raw_config.get('follow-names', False), 'relative-root': raw_config.get('relative-root', '/'), 'wrap-lines': raw_config.get('wrap-lines', True), + 'tail-lines': raw_config.get('tail-lines', 10) } if 'files' not in raw_config or not len(raw_config['files']): @@ -96,38 +98,7 @@ def helper(el, group='__ungrouped__', indict=False): #----------------------------------------------------------------------------- -# Option parsing: shared -#----------------------------------------------------------------------------- -def add_general_options(parser): - group = parser.add_argument_group('General options') - arg = group.add_argument - arg('-h', '--help', action='help', help='show this help message and exit') - arg('-d', '--debug', action='store_true', help='show debug messages') - arg('-v', '--version', action='version', version='tailon version %s' % __version__) - arg('--output-encoding', dest='output_encoding', metavar='enc', - help="encoding for output") - arg('--input-encoding', dest='input_encoding', default='utf8', metavar='enc', - help='encoding for input and output (default utf8)') - - return arg - -def add_server_options(parser): - group = parser.add_argument_group('Server options') - arg = group.add_argument - arg('-b', '--bind', metavar='addr:port', help='listen on the specified address and port') - arg('-r', '--relative-root', metavar='path', default='', help='web app root path') - return arg - -def add_ui_options(parser): - group = parser.add_argument_group('User-interface options') - arg = group.add_argument - arg('--no-wrap-lines', dest='wrap-lines', action='store_false', - help='initial line-wrapping state (default: true)') - return arg - - -#----------------------------------------------------------------------------- -# Option parsing: tailon +# Option parsing #----------------------------------------------------------------------------- def parseopts(args=None): description = ''' @@ -138,6 +109,7 @@ def parseopts(args=None): Example config file: bind: 0.0.0.0:8080 # address and port to bind on allow-transfers: true # allow log file downloads + follow-names: false # allow tailing of not-yet-existent files relative-root: /tailon # web app root path (default: '') commands: [tail, grep] # allowed commands tail-lines: 10 # number of lines to tail initially @@ -175,17 +147,38 @@ def parseopts(args=None): help='list of files or file wildcards to expose') #------------------------------------------------------------------------- - arg_general = add_general_options(parser) + group = parser.add_argument_group('General options') + arg = group.add_argument + arg('-h', '--help', action='help', help='show this help message and exit') + arg('-d', '--debug', action='store_true', help='show debug messages') + arg('-v', '--version', action='version', version='tailon version %s' % __version__) + + arg('--output-encoding', dest='output_encoding', metavar='enc', + help="encoding for output") + + arg('--input-encoding', dest='input_encoding', default='utf8', metavar='enc', + help='encoding for input and output (default utf8)') - arg = add_server_options(parser) + #------------------------------------------------------------------------- + group = parser.add_argument_group('Server options') + arg = group.add_argument + arg('-b', '--bind', metavar='addr:port', help='listen on the specified address and port') + arg('-r', '--relative-root', metavar='path', default='', help='web app root path') arg('-a', '--allow-transfers', action='store_true', help='allow log file downloads') + arg('-F', '--follow-names', action='store_true', help='allow tailing of not-yet-existent files') + arg('-t', '--tail-lines', default=10, type=int, metavar='num', help='number of lines to tail initially') + arg('-m', '--commands', nargs='*', metavar='cmd', choices=commands.ToolPaths.command_names, default=['tail', 'grep', 'awk'], help='allowed commands (default: tail grep awk)') - add_ui_options(parser) + #------------------------------------------------------------------------- + group = parser.add_argument_group('User-interface options') + arg = group.add_argument + arg('--no-wrap-lines', dest='wrap-lines', action='store_false', + help='initial line-wrapping state (default: true)') return parser, parser.parse_args(args) @@ -202,19 +195,27 @@ def setup(opts): 'files': {'__ungrouped__': []}, 'commands': opts.commands, 'allow-transfers': opts.allow_transfers, + 'follow-names': opts.follow_names, 'relative-root': opts.__dict__.get('relative_root', ''), 'debug': opts.__dict__.get('debug', False), 'tail-lines': opts.__dict__.get('tail_lines', 10), 'wrap-lines': opts.__dict__.get('wrap-lines', True), } - for entry in opts.files: + if config['follow-names']: + config['files']['__ungrouped__'] = opts.files # These don't need to exist. + else: + config['files']['__ungrouped__'] = list(filter_cli_files(opts.files)) + + return config + + +def filter_cli_files(files): + for entry in files: for path in glob.glob(entry): if path.startswith('./'): path = path.replace('./', '', 1) - config['files']['__ungrouped__'].append(path) - - return config + yield path def start_server(application, config, client_config): @@ -254,10 +255,12 @@ def main(argv=sys.argv): config = setup(opts) - file_lister = utils.FileLister(config['files'], True) + file_utils = utils.FileUtils(use_directory_cache=True) + file_lister = utils.FileLister(file_utils, config['files'], config['follow-names']) + # TODO: Need to handle situations in which only readable, empty # directories were given. - if not file_lister.all_file_names: + if not file_lister.all_file_names and not config['follow-names']: print('Error: none of the given files or directories exist or are readable.', file=sys.stderr) sys.exit(1) @@ -273,7 +276,7 @@ def main(argv=sys.argv): template_dir, assets_dir = get_resource_dirs() toolpaths = commands.ToolPaths() - cmd_control = commands.CommandControl(toolpaths) + cmd_control = commands.CommandControl(toolpaths, config['follow-names']) application = server.TailonApplication( config, client_config, template_dir, assets_dir, diff --git a/tailon-1.0.0/tailon/server.py b/tailon-1.1.1/tailon/server.py similarity index 94% rename from tailon-1.0.0/tailon/server.py rename to tailon-1.1.1/tailon/server.py index b85642e..207409d 100644 --- a/tailon-1.0.0/tailon/server.py +++ b/tailon-1.1.1/tailon/server.py @@ -10,6 +10,8 @@ import sockjs.tornado from tornado import web, ioloop, process, escape +from . import utils + STREAM = process.Subprocess.STREAM log = logging.getLogger('tailon') @@ -89,7 +91,10 @@ def __init__(self, *args, **kw): self.file_lister = self.application.file_lister self.cmd_control = self.application.cmd_control self.initial_tail_lines = self.config['tail-lines'] - self.last_line = [] + + self.last_stdout_line = [] + self.last_stderr_line = [] + self.processes = { 'tail': None, 'grep': None, @@ -111,14 +116,7 @@ def stdout_callback(self, path, stream, data): if not lines: return - if not lines[-1].endswith('\n'): - self.last_line.append(lines[-1]) - lines = lines[:-1] - else: - if self.last_line: - lines[0] = ''.join(self.last_line) + lines[0] - self.last_line = [] - + lines = utils.line_buffer(lines, self.last_stdout_line) self.write_json(lines) def stderr_callback(self, path, stream, data): @@ -126,13 +124,21 @@ def stderr_callback(self, path, stream, data): if not self.connected: return - text = data.decode('utf8', errors='replace') - if text.endswith(': file truncated\n'): - text = ['%s - %s - truncated' % (datetime.now(), path)] - else: - text = text.splitlines() + data = data.decode('utf8', errors='replace') + lines = data.splitlines(True) + + if not lines: + return + + lines = utils.line_buffer(lines, self.last_stderr_line) + + if not lines: + return + + if lines[-1].endswith(': file truncated\n'): + lines[-1] = ['%s - %s - truncated' % (datetime.now(), path)] - msg = {'err': text} + msg = {'err': lines} self.write_json(msg) def killall(self): diff --git a/tailon-1.0.0/tailon/templates/base.html b/tailon-1.1.1/tailon/templates/base.html similarity index 96% rename from tailon-1.0.0/tailon/templates/base.html rename to tailon-1.1.1/tailon/templates/base.html index 15fc3fe..aa68e70 100644 --- a/tailon-1.0.0/tailon/templates/base.html +++ b/tailon-1.1.1/tailon/templates/base.html @@ -36,7 +36,7 @@ - + diff --git a/tailon-1.0.0/tailon/templates/tailon.html b/tailon-1.1.1/tailon/templates/tailon.html similarity index 100% rename from tailon-1.0.0/tailon/templates/tailon.html rename to tailon-1.1.1/tailon/templates/tailon.html diff --git a/tailon-1.0.0/tailon/utils.py b/tailon-1.1.1/tailon/utils.py similarity index 63% rename from tailon-1.0.0/tailon/utils.py rename to tailon-1.1.1/tailon/utils.py index 0090ff4..334a3a0 100644 --- a/tailon-1.0.0/tailon/utils.py +++ b/tailon-1.1.1/tailon/utils.py @@ -28,34 +28,63 @@ def _format_action_invocation(self, action): return res -class FileLister: - def __init__(self, groups, use_directory_cache=True): - self.groups = groups +class FileUtils: + def __init__(self, use_directory_cache=True): self.use_directory_cache = use_directory_cache + self.directory_cache = {} self.directory_mtime = {} - self.files = collections.OrderedDict() - self.all_file_names = set() - self.all_dir_names = set() - self.refresh() - def listdir(self, path): if not self.use_directory_cache: return listdir_abspath(path) mtime = os.stat(path).st_mtime if mtime > self.directory_mtime.get(path, 0): - files = listdir_abspath(path) + files = self.listdir_abspath(path) self.directory_cache[path] = files self.directory_mtime[path] = mtime return self.directory_cache[path] + @staticmethod + def listdir_abspath(path, files_only=True): + paths = [os.path.join(path, i) for i in os.listdir(path)] + if not files_only: + return paths + return [path for path in paths if os.path.isfile(path)] + + @staticmethod + def statfiles(files, allow_missing=False): + for path in files: + if not os.access(path, os.R_OK) and not allow_missing: + continue + + if os.path.exists(path): + st = os.stat(path) + yield path, st.st_size, st.st_mtime + elif allow_missing: + yield path, None, None + else: + continue + + +class FileLister: + def __init__(self, lister, groups, include_missing=False): + self.lister = lister + self.groups = groups + self.include_missing = include_missing + + self.files = collections.OrderedDict() + self.all_file_names = set() + self.all_dir_names = set() + + self.refresh() + def is_path_allowed(self, path): return path in self.all_file_names def refresh(self): - log.debug('listing files') + log.debug('refreshing group file listings') self.files = collections.OrderedDict() self.all_dir_names = set() @@ -64,32 +93,19 @@ def refresh(self): for path in paths: if os.path.isdir(path): self.all_dir_names.add(path) - files.extend(self.listdir(path)) + files.extend(self.lister.listdir(path)) else: files.append(path) - self.files[group] = list(statfiles(files)) + + self.files[group] = list(self.lister.statfiles(files, self.include_missing)) afn = (i[0] for values in self.files.values() for i in values) afn = {os.path.abspath(i) for i in afn} + self.has_changed = (afn != self.all_file_names) self.all_file_names = afn -def listdir_abspath(path, files_only=True): - paths = [os.path.join(path, i) for i in os.listdir(path)] - if not files_only: - return paths - return [path for path in paths if os.path.isfile(path)] - - -def statfiles(files): - for path in files: - if not os.access(path, os.R_OK): - continue - st = os.stat(path) - yield path, st.st_size, st.st_mtime - - def parseaddr(arg): tmp = arg.split(':') port = int(tmp[-1]) @@ -100,3 +116,15 @@ def parseaddr(arg): def remove_escapes(string): return re.sub(r'\x1B\[(?:[0-9]{1,2}(?:;[0-9]{1,2})?)?[m|K]', '', string) + + +def line_buffer(lines, last_line): + if not lines[-1].endswith('\n'): + last_line.append(lines[-1]) + return lines[:-1] + elif last_line: + lines[0] = ''.join(last_line) + lines[0] + del last_line[:] # list.clear() is with py >= 3.3 + return lines + else: + return lines diff --git a/tailon-1.0.0/tasks.py b/tailon-1.1.1/tasks.py similarity index 100% rename from tailon-1.0.0/tasks.py rename to tailon-1.1.1/tasks.py diff --git a/tailon-1.0.0/tests/__init__.py b/tailon-1.1.1/tests/__init__.py similarity index 100% rename from tailon-1.0.0/tests/__init__.py rename to tailon-1.1.1/tests/__init__.py diff --git a/tailon-1.0.0/tests/logsim.py b/tailon-1.1.1/tests/logsim.py similarity index 100% rename from tailon-1.0.0/tests/logsim.py rename to tailon-1.1.1/tests/logsim.py diff --git a/tailon-1.0.0/tests/test_config.py b/tailon-1.1.1/tests/test_config.py similarity index 98% rename from tailon-1.0.0/tests/test_config.py rename to tailon-1.1.1/tests/test_config.py index e0ceb03..277f5d6 100644 --- a/tailon-1.0.0/tests/test_config.py +++ b/tailon-1.1.1/tests/test_config.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8; -*- - import pytest import os diff --git a/tailon-1.1.1/tests/test_utils.py b/tailon-1.1.1/tests/test_utils.py new file mode 100644 index 0000000..bfb6a4c --- /dev/null +++ b/tailon-1.1.1/tests/test_utils.py @@ -0,0 +1,13 @@ +from tailon import utils + + +def test_line_buffer(): + last_line = [] + + assert utils.line_buffer(['abc\n', 'zxc'], last_line) == ['abc\n'] + assert utils.line_buffer(['123\n'], last_line) == ['zxc123\n'] + assert last_line == [] + + +def test_parse_addr(): + assert utils.parseaddr('localhost:8080') == (8080, 'localhost') diff --git a/tailon-1.0.0/webassets.yaml b/tailon-1.1.1/webassets.yaml similarity index 100% rename from tailon-1.0.0/webassets.yaml rename to tailon-1.1.1/webassets.yaml