Skip to content

Commit 18f263d

Browse files
committed
Better '200/206' expect rules for cherokee
1 parent 2b14063 commit 18f263d

File tree

1 file changed

+36
-22
lines changed

1 file changed

+36
-22
lines changed

logtail.js

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ var poll = 1000; /* 1s */
99

1010
var kill = false;
1111
var loading = false;
12-
var log_data = null;
13-
var log_size = null;
12+
var log_data = "";
13+
var log_size = 0;
1414

1515
function get_log() {
1616
if (kill | loading) return;
1717
loading = true;
1818

1919
var range;
20-
if (log_size === null)
20+
if (log_size === 0)
2121
/* Get the last 'load' bytes */
2222
range = "-" + load.toString();
2323
else
@@ -35,17 +35,29 @@ function get_log() {
3535
success: function (data, s, xhr) {
3636
loading = false;
3737

38-
var c_r = xhr.getResponseHeader("Content-Range");
39-
if (c_r === null)
40-
throw "Server did not respond with a Content-Range";
38+
var size;
4139

42-
log_size = parseInt(c_r.split("/")[1]);
43-
if (isNaN(log_size))
44-
throw "Invalid Content-Range size";
40+
if (xhr.status === 206) {
41+
if (data.length > load)
42+
throw "Expected 206 Partial Content";
43+
44+
var c_r = xhr.getResponseHeader("Content-Range");
45+
if (!c_r)
46+
throw "Server did not respond with a Content-Range";
47+
48+
size = parseInt(c_r.split("/")[1]);
49+
if (isNaN(size))
50+
throw "Invalid Content-Range size";
51+
} else if (xhr.status === 200) {
52+
if (log_size > 1)
53+
throw "Expected 206 Partial Content";
54+
55+
size = data.length;
56+
}
4557

4658
var added = false;
4759

48-
if (log_data === null) {
60+
if (log_size === 0) {
4961
/* Clip leading part-line if not the whole file */
5062
if (data.length < log_size) {
5163
var start = data.indexOf("\n");
@@ -59,15 +71,16 @@ function get_log() {
5971
/* Drop the first byte (see above) */
6072
log_data += data.substring(1);
6173

74+
if (log_data.length > load) {
75+
var start = log_data.indexOf("\n", log_data.length - load);
76+
log_data = log_data.substring(start + 1);
77+
}
78+
6279
if (data.length > 1)
6380
added = true;
6481
}
6582

66-
if (log_data.length > load) {
67-
var start = log_data.indexOf("\n", log_data.length - load);
68-
log_data = log_data.substring(start + 1);
69-
}
70-
83+
log_size = size;
7184
show_log(added);
7285
setTimeout(get_log, poll);
7386
},
@@ -78,8 +91,8 @@ function get_log() {
7891
/* 416: Requested range not satisfiable: log was truncated. */
7992
/* 404: Retry soon, I guess */
8093

81-
log_size = null;
82-
log_data = null;
94+
log_size = 0;
95+
log_data = "";
8396
show_log(true);
8497

8598
setTimeout(get_log, poll);
@@ -97,18 +110,19 @@ function show_log(scroll) {
97110
var d = $(dataelem);
98111
var s = $(scrollelem);
99112

100-
if (log_data !== null)
101-
d.text(log_data);
102-
else
103-
d.text("");
113+
d.text(log_data);
104114

105115
if (scroll)
106116
s.scrollTop(s.height());
107117
}
108118

109119
function error(what) {
110120
kill = true;
111-
/* TODO: error msg */
121+
122+
$(dataelem).text("An error occured :-(.\n" +
123+
"Reloading may help; no promises.\n" +
124+
what);
125+
$(scrollelem).scrollTop(0);
112126
}
113127

114128
$(document).ready(function () {

0 commit comments

Comments
 (0)