Skip to content

Commit 1b9103a

Browse files
committed
Merge pull request ukhas#9 from danielrichman/master
Refactor a little
2 parents f90f69a + 4aa1c83 commit 1b9103a

File tree

1 file changed

+39
-24
lines changed

1 file changed

+39
-24
lines changed

logtail.js

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,36 @@ var loading = false;
1717
var pause = false;
1818
var reverse = true;
1919
var log_data = "";
20-
var log_size = 0;
20+
var log_file_size = 0;
21+
22+
/* :-( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt */
23+
function parseInt2(value) {
24+
if(!(/^[0-9]+$/.test(value))) throw "Invalid integer " + value;
25+
var v = Number(value);
26+
if (isNaN(v)) throw "Invalid integer " + value;
27+
return v;
28+
}
2129

2230
function get_log() {
2331
if (kill | loading) return;
2432
loading = true;
2533

2634
var range;
27-
if (log_size === 0)
35+
var first_load;
36+
var must_get_206;
37+
if (log_file_size === 0) {
2838
/* Get the last 'load' bytes */
2939
range = "-" + load.toString();
30-
else
31-
/* Get the (log_size - 1)th byte, onwards. */
32-
range = (log_size - 1).toString() + "-";
40+
first_load = true;
41+
must_get_206 = false;
42+
} else {
43+
/* Get the (log_file_size - 1)th byte, onwards. */
44+
range = (log_file_size - 1).toString() + "-";
45+
first_load = false;
46+
must_get_206 = log_file_size > 1;
47+
}
3348

34-
/* The "log_size - 1" deliberately reloads the last byte, which we already
49+
/* The "log_file_size - 1" deliberately reloads the last byte, which we already
3550
* have. This is to prevent a 416 "Range unsatisfiable" error: a response
3651
* of length 1 tells us that the file hasn't changed yet. A 416 shows that
3752
* the file has been trucnated */
@@ -43,31 +58,33 @@ function get_log() {
4358
success: function (data, s, xhr) {
4459
loading = false;
4560

46-
var size;
61+
var content_size;
4762

4863
if (xhr.status === 206) {
49-
if (data.length > load)
50-
throw "Expected 206 Partial Content";
51-
5264
var c_r = xhr.getResponseHeader("Content-Range");
5365
if (!c_r)
5466
throw "Server did not respond with a Content-Range";
5567

56-
size = parseInt(c_r.split("/")[1]);
57-
if (isNaN(size))
58-
throw "Invalid Content-Range size";
68+
log_file_size = parseInt2(c_r.split("/")[1]);
69+
content_size = parseInt2(xhr.getResponseHeader("Content-Length"));
5970
} else if (xhr.status === 200) {
60-
if (log_size > 1)
71+
if (must_get_206)
6172
throw "Expected 206 Partial Content";
6273

63-
size = data.length;
74+
content_size = log_file_size =
75+
parseInt2(xhr.getResponseHeader("Content-Length"));
76+
} else {
77+
throw "Unexpected status " + xhr.status;
6478
}
6579

80+
if (first_load && data.length > load)
81+
throw "Server's response was too long";
82+
6683
var added = false;
6784

68-
if (log_size === 0) {
85+
if (first_load) {
6986
/* Clip leading part-line if not the whole file */
70-
if (data.length < size) {
87+
if (content_size < log_file_size) {
7188
var start = data.indexOf("\n");
7289
log_data = data.substring(start + 1);
7390
} else {
@@ -88,7 +105,6 @@ function get_log() {
88105
added = true;
89106
}
90107

91-
log_size = size;
92108
if (added)
93109
show_log(added);
94110
setTimeout(get_log, poll);
@@ -100,16 +116,13 @@ function get_log() {
100116
/* 416: Requested range not satisfiable: log was truncated. */
101117
/* 404: Retry soon, I guess */
102118

103-
log_size = 0;
119+
log_file_size = 0;
104120
log_data = "";
105121
show_log();
106122

107123
setTimeout(get_log, poll);
108124
} else {
109-
if (s == "error")
110-
error(xhr.statusText);
111-
else
112-
error("AJAX Error: " + s);
125+
throw "Unknown AJAX Error (status " + xhr.status + ")";
113126
}
114127
}
115128
});
@@ -153,10 +166,12 @@ function error(what) {
153166
"Reloading may help; no promises.\r\n" +
154167
what);
155168
scroll(0);
169+
170+
return false;
156171
}
157172

158173
$(document).ready(function () {
159-
$(window).error(error);
174+
window.onerror = error;
160175

161176
/* If URL is /logtail/?noreverse display in chronological order */
162177
var hash = location.search.replace(/^\?/, "");

0 commit comments

Comments
 (0)