@@ -17,21 +17,36 @@ var loading = false;
17
17
var pause = false ;
18
18
var reverse = true ;
19
19
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
+ }
21
29
22
30
function get_log ( ) {
23
31
if ( kill | loading ) return ;
24
32
loading = true ;
25
33
26
34
var range ;
27
- if ( log_size === 0 )
35
+ var first_load ;
36
+ var must_get_206 ;
37
+ if ( log_file_size === 0 ) {
28
38
/* Get the last 'load' bytes */
29
39
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
+ }
33
48
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
35
50
* have. This is to prevent a 416 "Range unsatisfiable" error: a response
36
51
* of length 1 tells us that the file hasn't changed yet. A 416 shows that
37
52
* the file has been trucnated */
@@ -43,31 +58,33 @@ function get_log() {
43
58
success : function ( data , s , xhr ) {
44
59
loading = false ;
45
60
46
- var size ;
61
+ var content_size ;
47
62
48
63
if ( xhr . status === 206 ) {
49
- if ( data . length > load )
50
- throw "Expected 206 Partial Content" ;
51
-
52
64
var c_r = xhr . getResponseHeader ( "Content-Range" ) ;
53
65
if ( ! c_r )
54
66
throw "Server did not respond with a Content-Range" ;
55
67
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" ) ) ;
59
70
} else if ( xhr . status === 200 ) {
60
- if ( log_size > 1 )
71
+ if ( must_get_206 )
61
72
throw "Expected 206 Partial Content" ;
62
73
63
- size = data . length ;
74
+ content_size = log_file_size =
75
+ parseInt2 ( xhr . getResponseHeader ( "Content-Length" ) ) ;
76
+ } else {
77
+ throw "Unexpected status " + xhr . status ;
64
78
}
65
79
80
+ if ( first_load && data . length > load )
81
+ throw "Server's response was too long" ;
82
+
66
83
var added = false ;
67
84
68
- if ( log_size === 0 ) {
85
+ if ( first_load ) {
69
86
/* Clip leading part-line if not the whole file */
70
- if ( data . length < size ) {
87
+ if ( content_size < log_file_size ) {
71
88
var start = data . indexOf ( "\n" ) ;
72
89
log_data = data . substring ( start + 1 ) ;
73
90
} else {
@@ -88,7 +105,6 @@ function get_log() {
88
105
added = true ;
89
106
}
90
107
91
- log_size = size ;
92
108
if ( added )
93
109
show_log ( added ) ;
94
110
setTimeout ( get_log , poll ) ;
@@ -100,16 +116,13 @@ function get_log() {
100
116
/* 416: Requested range not satisfiable: log was truncated. */
101
117
/* 404: Retry soon, I guess */
102
118
103
- log_size = 0 ;
119
+ log_file_size = 0 ;
104
120
log_data = "" ;
105
121
show_log ( ) ;
106
122
107
123
setTimeout ( get_log , poll ) ;
108
124
} else {
109
- if ( s == "error" )
110
- error ( xhr . statusText ) ;
111
- else
112
- error ( "AJAX Error: " + s ) ;
125
+ throw "Unknown AJAX Error (status " + xhr . status + ")" ;
113
126
}
114
127
}
115
128
} ) ;
@@ -153,10 +166,12 @@ function error(what) {
153
166
"Reloading may help; no promises.\r\n" +
154
167
what ) ;
155
168
scroll ( 0 ) ;
169
+
170
+ return false ;
156
171
}
157
172
158
173
$ ( document ) . ready ( function ( ) {
159
- $ ( window ) . error ( error ) ;
174
+ window . onerror = error ;
160
175
161
176
/* If URL is /logtail/?noreverse display in chronological order */
162
177
var hash = location . search . replace ( / ^ \? / , "" ) ;
0 commit comments