@@ -9,15 +9,15 @@ var poll = 1000; /* 1s */
9
9
10
10
var kill = false ;
11
11
var loading = false ;
12
- var log_data = null ;
13
- var log_size = null ;
12
+ var log_data = "" ;
13
+ var log_size = 0 ;
14
14
15
15
function get_log ( ) {
16
16
if ( kill | loading ) return ;
17
17
loading = true ;
18
18
19
19
var range ;
20
- if ( log_size === null )
20
+ if ( log_size === 0 )
21
21
/* Get the last 'load' bytes */
22
22
range = "-" + load . toString ( ) ;
23
23
else
@@ -35,17 +35,29 @@ function get_log() {
35
35
success : function ( data , s , xhr ) {
36
36
loading = false ;
37
37
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 ;
41
39
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
+ }
45
57
46
58
var added = false ;
47
59
48
- if ( log_data === null ) {
60
+ if ( log_size === 0 ) {
49
61
/* Clip leading part-line if not the whole file */
50
62
if ( data . length < log_size ) {
51
63
var start = data . indexOf ( "\n" ) ;
@@ -59,15 +71,16 @@ function get_log() {
59
71
/* Drop the first byte (see above) */
60
72
log_data += data . substring ( 1 ) ;
61
73
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
+
62
79
if ( data . length > 1 )
63
80
added = true ;
64
81
}
65
82
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 ;
71
84
show_log ( added ) ;
72
85
setTimeout ( get_log , poll ) ;
73
86
} ,
@@ -78,8 +91,8 @@ function get_log() {
78
91
/* 416: Requested range not satisfiable: log was truncated. */
79
92
/* 404: Retry soon, I guess */
80
93
81
- log_size = null ;
82
- log_data = null ;
94
+ log_size = 0 ;
95
+ log_data = "" ;
83
96
show_log ( true ) ;
84
97
85
98
setTimeout ( get_log , poll ) ;
@@ -97,18 +110,19 @@ function show_log(scroll) {
97
110
var d = $ ( dataelem ) ;
98
111
var s = $ ( scrollelem ) ;
99
112
100
- if ( log_data !== null )
101
- d . text ( log_data ) ;
102
- else
103
- d . text ( "" ) ;
113
+ d . text ( log_data ) ;
104
114
105
115
if ( scroll )
106
116
s . scrollTop ( s . height ( ) ) ;
107
117
}
108
118
109
119
function error ( what ) {
110
120
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 ) ;
112
126
}
113
127
114
128
$ ( document ) . ready ( function ( ) {
0 commit comments