~ubuntu-branches/ubuntu/precise/boinc/precise

« back to all changes in this revision

Viewing changes to html/inc/result.inc

Tags: 6.12.8+dfsg-1
* New upstream release.
* Simplified debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
// You should have received a copy of the GNU Lesser General Public License
17
17
// along with BOINC.  If not, see <http://www.gnu.org/licenses/>.
18
18
 
19
 
function result_claimed_credit_string($result, $string_to_show) {
20
 
    if ($result->server_state <> 5) return "---";
21
 
    switch($result->outcome) {
22
 
    case 3:
23
 
        if ($result->exit_status <> -221) {
24
 
                return $string_to_show; //Client error
25
 
        } 
26
 
    default:
27
 
        if ($result->claimed_credit > 0) {
28
 
            return $string_to_show;
29
 
            }
30
 
        return "---"; // no claimed credit 
31
 
    }
 
19
$apps = array();
 
20
$app_versions = array();
 
21
 
 
22
function anon_platform_string($result, $rsc_name=null) {
 
23
    global $apps;
 
24
    if (!array_key_exists($result->appid, $apps)) {
 
25
        $app = BoincApp::lookup_id($result->appid);
 
26
        $apps[$result->appid] = $app;
 
27
    }
 
28
    $app = $apps[$result->appid];
 
29
    $n = $app->user_friendly_name."<br>".  tra("Anonymous platform");
 
30
    if ($rsc_name) {
 
31
        $n .= " ($rsc_name)";
 
32
    }
 
33
    return $n;
 
34
}
 
35
 
 
36
function app_version_string($result) {
 
37
    global $apps, $app_versions;
 
38
 
 
39
    $id = $result->app_version_id;
 
40
    if ($id == 0) return "";
 
41
    if ($id == -1) return anon_platform_string($result);
 
42
    if ($id == -2) return anon_platform_string($result, tra("CPU"));
 
43
    if ($id == -3) return anon_platform_string($result, tra("NVIDIA GPU"));
 
44
    if ($id == -4) return anon_platform_string($result, tra("ATI GPU"));
 
45
    if (array_key_exists($id, $app_versions)) {
 
46
        $av = $app_versions[$id];
 
47
        $app = $apps[$av->appid];
 
48
    } else {
 
49
        $av = BoincAppVersion::lookup_id($id);
 
50
        if (!$av) {
 
51
            return tra("Not in DB");
 
52
        }
 
53
        $app_versions[$id] = $av;
 
54
        $app = BoincApp::lookup_id($av->appid);
 
55
        $apps[$av->appid] = $app;
 
56
    }
 
57
    $n = $app->user_friendly_name;
 
58
    $v = sprintf("%d.%02d", $av->version_num/100, $av->version_num%100);
 
59
    if ($av->plan_class) {
 
60
        $c = "($av->plan_class)";
 
61
    } else {
 
62
        $c = "";
 
63
    }
 
64
    return "$n v$v $c";
32
65
}
33
66
 
34
67
function result_granted_credit_string($result, $string_to_show) {
 
68
    if ($result->server_state == 4 && $result->granted_credit > 0) {
 
69
        return $string_to_show; 
 
70
    }
35
71
    if ($result->server_state <> 5) return "---";
36
72
    switch($result->outcome) {
37
73
    case 1:              //Success
38
74
        switch ($result->validate_state) {
39
75
        case 0:
40
76
        case 4:
41
 
            return "pending";
 
77
            return tra("pending");
42
78
        }
43
79
        return $string_to_show;
44
80
    default:
45
81
        if ($result->granted_credit > 0) {
46
82
            return $string_to_show;
47
83
            }
48
 
        return "---"; // no claimed credit 
 
84
        return "---";
49
85
    }
50
86
51
87
 
 
88
// various states that we allow users to filter on
 
89
 
 
90
define("STATE_ALL", 0);
 
91
define("STATE_IN_PROGRESS", 1);
 
92
define("STATE_PENDING", 2);
 
93
define("STATE_VALID", 3);
 
94
define("STATE_INVALID", 4);
 
95
define("STATE_ERROR", 5);
 
96
define("NSTATES", 6);
 
97
 
 
98
$state_name = array(
 
99
    tra("All"),
 
100
    tra("In progress"),
 
101
    tra("Pending"),
 
102
    tra("Valid"),
 
103
    tra("Invalid"),
 
104
    tra("Error"),
 
105
);
 
106
 
 
107
$state_clause = array(
 
108
    "",
 
109
    " and server_state=4 ",
 
110
    " and server_state=5 and outcome=1 and (validate_state=0 or validate_state=4) ",
 
111
    " and server_state=5 and outcome=1 and validate_state=1 ",
 
112
    " and server_state=5 and (outcome=6 or (outcome=1 and (validate_state=2 or validate_state=3 or validate_state=5))) ",
 
113
    " and server_state=5 and (outcome=3 or outcome=4 or outcome=7) ",
 
114
);
 
115
 
 
116
function state_string($result) {
 
117
    switch ($result->server_state) {
 
118
    case 1: return tra("Inactive");
 
119
    case 2: return tra("Unsent");
 
120
    case 4: return tra("In progress");
 
121
    case 5:
 
122
        switch ($result->outcome) {
 
123
        case 1:
 
124
            switch ($result->validate_state) {
 
125
            case 0: return tra("Completed, waiting for validation");
 
126
            case 1: return tra("Completed and validated");
 
127
            case 2: return tra("Completed, marked as invalid");
 
128
            case 3: return tra("Completed, can't validate");
 
129
            case 4: return tra("Completed, validation inconclusive");
 
130
            case 5: return tra("Completed, too late to validate");
 
131
            }
 
132
            return tra("Completed");
 
133
        case 2: return tra("Couldn't send");
 
134
        case 3:
 
135
            if ($result->exit_status == -221) {
 
136
                return tra("Cancelled by server");
 
137
            }
 
138
            switch($result->client_state) {
 
139
            case 1: return tra("Error while downloading");
 
140
            case 2:
 
141
            case 3: return tra("Error while computing");
 
142
            case 4: return tra("Error while uploading");
 
143
            case 6: return tra("Aborted by user");
 
144
            }
 
145
            return tra("Error");
 
146
        case 4: return tra("Timed out - no response");
 
147
        case 5: return tra("Didn't need");
 
148
        case 6: return tra("Validate error");
 
149
        case 7: return tra("Abandoned");
 
150
        }
 
151
    }
 
152
    return tra("Unknown");
 
153
}
 
154
 
52
155
function result_server_state_string($result) {
53
156
    switch($result->server_state) {
54
 
    case 1: return "Inactive";
55
 
    case 2: return "Unsent";
56
 
    case 4: return "In progress";
57
 
    case 5: return "Over";
 
157
    case 1: return tra("Inactive");
 
158
    case 2: return tra("Unsent");
 
159
    case 4: return tra("In progress");
 
160
    case 5: return tra("Over");
58
161
    }
59
 
    return "Unknown";
 
162
    return tra("Unknown");
60
163
}
61
164
 
62
165
function result_outcome_string($result) {
63
166
    switch($result->outcome) {
64
167
    case 0: return "---";
65
 
    case 1: return "Success";
66
 
    case 2: return "Couldn't send";
 
168
    case 1: return tra("Success");
 
169
    case 2: return tra("Couldn't send");
67
170
    case 3:
68
171
        if ($result->exit_status <> -221) {
69
 
               return "Client error";
 
172
            return tra("Computation error");
70
173
        }
71
 
        return "Redundant result";
72
 
    case 4: return "No reply";
73
 
    case 5: return "Didn't need";
74
 
    case 6: return "Validate error";
75
 
    case 7: return "Client detached";
 
174
        return tra("Redundant result");
 
175
    case 4: return tra("No reply");
 
176
    case 5: return tra("Didn't need");
 
177
    case 6: return tra("Validate error");
 
178
    case 7: return tra("Abandoned");
76
179
    }
77
 
    return "Unknown";
 
180
    return tra("Unknown");
78
181
}
79
182
 
80
183
function result_client_state_string($result) {
81
184
    switch($result->client_state) {
82
 
    case 0: return "New";
83
 
    case 1: return "Downloading";
84
 
    case 2: return "Computing";
85
 
    case 3: return "Compute error";
86
 
    case 4: return "Uploading";
87
 
    case 5: return "Done";
 
185
    case 0: return tra("New");
 
186
    case 1: return tra("Downloading");
 
187
    case 2: return tra("Processing");
 
188
    case 3: return tra("Compute error");
 
189
    case 4: return tra("Uploading");
 
190
    case 5: return tra("Done");
88
191
    case 6:
89
 
        if ($result->exit_status <> -221) {
90
 
            return "Aborted by user";
 
192
        if ($result->exit_status == -221) {
 
193
            return tra("Cancelled by server");
91
194
        }
92
 
        return "Cancelled by server";
 
195
        return tra("Aborted by user");
93
196
    }
94
197
}
95
198
 
96
199
function validate_state_str($result) {
97
200
    switch($result->validate_state) {
98
 
    case 0: return "Initial";
99
 
    case 1: return "Valid";
 
201
    case 0: return tra("Initial");
 
202
    case 1: return tra("Valid");
100
203
    case 2:
101
204
        if ($result->exit_status <> -221) {
102
 
            return "Invalid";
 
205
            return tra("Invalid");
103
206
        }
104
 
        return "Not necessary";
105
 
    case 3: return "Workunit error - check skipped";
106
 
    case 4: return "Checked, but no consensus yet";
107
 
    case 5: return "Task was reported too late to validate";
 
207
        return tra("Not necessary");
 
208
    case 3: return tra("Workunit error - check skipped");
 
209
    case 4: return tra("Checked, but no consensus yet");
 
210
    case 5: return tra("Task was reported too late to validate");
108
211
    }
109
 
    return "Unknown";
 
212
    return tra("Unknown");
110
213
}
111
214
 
112
215
function wu_error_mask_str($s) {
113
216
    $x = "";
114
217
    if ($s & 1) {
115
 
        $x = $x."Couldn't send result ";
 
218
        $x = $x." ".tra("Couldn't send result");
116
219
        $s -= 1;
117
220
    }
118
221
    if ($s & 2) {
119
 
        $x = $x."Too many error results ";
 
222
        $x = $x." ".tra("Too many errors (may have bug)");
120
223
        $s -= 2;
121
224
    }
122
225
    if ($s & 4) {
123
 
        $x = $x."Too many success results ";
 
226
        $x = $x." ".tra("Too many results (may be nondeterministic)");
124
227
        $s -= 4;
125
228
    }
126
229
    if ($s & 8) {
127
 
        $x = $x."Too many total results ";
 
230
        $x = $x." ".tra("Too many total results");
128
231
        $s -= 8;
129
232
    }
130
233
    if ($s & 16) {
131
 
        $x = $x."Cancelled ";
 
234
        $x = $x." ".tra("WU cancelled");
132
235
        $s -= 16;
133
236
    }
134
237
    if ($s) {
135
 
        $x = $x."Unrecognized Error: $s ";
 
238
        $x = $x." ".tra("Unrecognized Error: %1", $s);
136
239
    }
137
 
    if (!strlen($x)) {
138
 
        $x="<br>";
 
240
    if (strlen($x)) {
 
241
        $x="<font color=\"#ff3333\">".$x."</font>";
 
242
    } else {
 
243
        $x="";
139
244
    }
140
245
    return $x;
141
246
}
142
247
 
143
 
function result_table_start($show_wu_link, $show_host_link, $show_result_link) {
 
248
function result_page_url($info) {
 
249
    $c = $info->clause;
 
250
    $o = $info->offset;
 
251
    $sn = $info->show_names;
 
252
    $st = $info->state;
 
253
    $appid = $info->appid;
 
254
    return "results.php?$c&amp;offset=$o&amp;show_names=$sn&amp;state=$st&amp;appid=$appid";
 
255
}
 
256
 
 
257
function result_table_start($show_wu_link, $show_host_link, $info) {
144
258
    start_table();
145
 
    echo "
146
 
        <tr>
147
 
    ";
148
 
    if ($show_result_link) {
149
 
        echo "<th>Task ID<br><span class=\"smalltext\">click for details</span></th>\n";
 
259
    echo "<tr>";
 
260
    if ($info) {
 
261
        if ($info->show_names) {
 
262
            $i2 = clone $info;
 
263
            $i2->show_names = 0;
 
264
            $url = result_page_url($i2);
 
265
            echo "<th>".tra("Task name")."<br><span class=\"smalltext\">".tra("click for details")."<br><a href=$url>".tra("Show IDs")."</a></span></th>\n";
 
266
        } else {
 
267
            $i2 = clone $info;
 
268
            $i2->show_names = 1;
 
269
            $url = result_page_url($i2);
 
270
            echo "<th>Task<br><span class=\"smalltext\">".tra("click for details")."<br><a href=$url>".tra("Show names")."</a></span></th>\n";
 
271
        }
 
272
    } else {
 
273
        echo "<th>".tra("Task")."<br><span class=\"smalltext\">".tra("click for details")."</span></th>\n";
150
274
    }
151
275
    if ($show_wu_link) {
152
 
        echo "<th>Work unit ID<br><span class=\"smalltext\">click for details</span></th>\n";
 
276
        echo "<th>".tra("Work unit")."<br><span class=\"smalltext\">".tra("click for details")."</span></th>\n";
153
277
    }
154
278
    if ($show_host_link) {
155
 
        echo "<th>Computer</th>\n";
 
279
        echo "<th>".tra("Computer")."</th>\n";
156
280
    }
157
281
    echo "
158
 
        <th>Sent</th>
159
 
        <th>Time reported
160
 
            <br>or deadline
161
 
            <br><span class=\"smalltext\"><a href=\"explain_state.php?field=result_time\">explain</a></span>
162
 
        </th>
163
 
        <th>Server state
164
 
            <br><span class=\"smalltext\"><a href=\"explain_state.php?field=result_server_state\">explain</a></span>
165
 
        </th>
166
 
        <th>Outcome
167
 
            <br><span class=\"smalltext\"><a href=\"explain_state.php?field=result_outcome\">explain</a></span>
168
 
        </th>
169
 
        <th>Client state
170
 
            <br><span class=\"smalltext\"><a href=\"explain_state.php?field=result_client_state\">explain</a></span>
171
 
        </th>
172
 
        <th>CPU time (sec)</th>
173
 
        <th>claimed credit</th>
174
 
        <th>granted credit</th>
 
282
        <th>".tra("Sent")."</th>
 
283
        <th>".tra("Time reported<br />or deadline")."
 
284
            <br><span class=\"smalltext\"><a href=\"explain_state.php?field=result_time\">".tra("explain")."</a></span>
 
285
        </th>
 
286
        <th>".tra("Status")."</th>
 
287
        <th>".tra("Run time<br />(sec)")."</th>
 
288
        <th>".tra("CPU time<br />(sec)")."</th>
 
289
        <th>".tra("Credit")."</th>
 
290
        <th>".tra("Application")."</th>
175
291
        </tr>
176
292
    ";
177
293
}
185
301
}
186
302
 
187
303
function show_result_row(
188
 
    $result, $show_wu_link, $show_host_link, $show_result_link, $i
 
304
    $result, $show_wu_link, $show_host_link, $show_name, $i
189
305
) {
190
306
    $s = time_str($result->sent_time);
191
 
    // if result has been received, show the received time,
 
307
    // if result has been reported, show the received time,
192
308
    // else show the reporting deadline in green if in the future
193
309
    // and in red if in the past.
194
310
    //
203
319
    } else {
204
320
        $r = "---";
205
321
    }
206
 
    $ss = result_server_state_string($result);
207
 
    $out = result_outcome_string($result);
208
 
    $cl = result_client_state_string($result);
209
 
    $result_claimed_credit = format_credit($result->claimed_credit);
 
322
    $ss = state_string($result);
210
323
    $result_granted_credit = format_credit($result->granted_credit);
211
 
    $result_claimed_credit = result_claimed_credit_string($result, $result_claimed_credit);
212
324
    $result_granted_credit = result_granted_credit_string($result, $result_granted_credit); 
213
325
    $j = $i % 2;
214
326
    echo "<tr class=row$j>";
215
 
    if ($show_result_link) {
216
 
        echo "<td><a href=\"result.php?resultid=$result->id\" title=\"Name: ".$result->name."\">$result->id</a></td>\n";
 
327
    if ($show_name) {
 
328
        $x = $result->name;
 
329
    } else {
 
330
        $x = $result->id;
217
331
    }
 
332
    echo "<td><a href=\"result.php?resultid=$result->id\">$x</a></td>\n";
218
333
    if ($show_wu_link) {
219
334
        echo "<td><a href=\"workunit.php?wuid=$result->workunitid\">$result->workunitid</a></td>\n";
220
335
    }
223
338
    }
224
339
    if ($result->server_state <> 5) {
225
340
        $cpu_time = "---";
 
341
        $elapsed_time = "---";
226
342
    } else {
227
343
        $cpu_time = number_format($result->cpu_time, 2);
 
344
        $elapsed_time = number_format($result->elapsed_time, 2);
228
345
    }
 
346
    $v = app_version_string($result);
229
347
    echo "
230
348
        <td>$s</td>
231
349
        <td>$r</td>
232
350
        <td>$ss</td>
233
 
        <td>$out</td>
234
 
        <td>$cl</td>
235
 
        <td>$cpu_time</td>
236
 
        <td>$result_claimed_credit</td>
237
 
        <td>$result_granted_credit</td>
 
351
        <td align=right>$elapsed_time</td>
 
352
        <td align=right>$cpu_time</td>
 
353
        <td align=right>$result_granted_credit</td>
 
354
        <td>$v</td>
238
355
        </tr>
239
356
    ";
240
357
}
259
376
 
260
377
function show_result($result) {
261
378
    start_table();
262
 
    row2("Task ID", $result->id);
263
 
    row2("Name", $result->name);
264
 
    row2("Workunit", "<a href=\"workunit.php?wuid=$result->workunitid\">$result->workunitid</a>");
265
 
    row2("Created", time_str($result->create_time));
266
 
    row2("Sent", time_str($result->sent_time));
267
 
    row2("Received", time_str($result->received_time));
268
 
    row2("Server state", result_server_state_string($result));
269
 
    row2("Outcome", result_outcome_string($result));
270
 
    row2("Client state", result_client_state_string($result));
271
 
    row2("Exit status", exit_status_string($result));
272
 
    row2("Computer ID", host_link($result->hostid));
273
 
    row2("Report deadline", time_str($result->report_deadline));
274
 
    row2("CPU time", $result->cpu_time);
275
 
    row2("stderr out", "<pre>".htmlspecialchars($result->stderr_out)."</pre>");
276
 
    row2("Validate state", validate_state_str($result));
277
 
    row2("Claimed credit", $result->claimed_credit);
278
 
    row2("Granted credit", $result->granted_credit);
279
 
    row2("application version", version_string($result->app_version_num));
 
379
    row2(tra("Name"), $result->name);
 
380
    row2(tra("Workunit"), "<a href=\"workunit.php?wuid=$result->workunitid\">$result->workunitid</a>");
 
381
    row2(tra("Created"), time_str($result->create_time));
 
382
    row2(tra("Sent"), time_str($result->sent_time));
 
383
    row2(tra("Received"), time_str($result->received_time));
 
384
    row2(tra("Server state"), result_server_state_string($result));
 
385
    row2(tra("Outcome"), result_outcome_string($result));
 
386
    row2(tra("Client state"), result_client_state_string($result));
 
387
    row2(tra("Exit status"), exit_status_string($result));
 
388
    row2(tra("Computer ID"), host_link($result->hostid));
 
389
    row2(tra("Report deadline"), time_str($result->report_deadline));
 
390
    row2(tra("Run time"), number_format($result->elapsed_time, 2));
 
391
    row2(tra("CPU time"), number_format($result->cpu_time, 2));
 
392
    row2(tra("Validate state"), validate_state_str($result));
 
393
    row2(tra("Credit"), number_format($result->granted_credit, 2));
 
394
    row2(tra("Application version"), app_version_string($result));
280
395
    end_table();
 
396
    echo "<h3>".tra("Stderr output")."</h3> <pre>".htmlspecialchars($result->stderr_out)."</pre>";
281
397
}
282
398
 
283
 
function show_result_navigation(
284
 
    $clause, $number_of_results, $offset, $results_per_page
285
 
) {
 
399
function show_result_navigation($info) {
 
400
    global $state_name;
 
401
 
286
402
    echo "<br><center>";
287
 
    if ($offset >= $results_per_page) {
288
 
        $offset_p = $offset-$results_per_page;
289
 
        echo "<a href=results.php?$clause&offset=$offset_p>Previous $results_per_page</a>";
 
403
    $show_prev = ($info->offset >= $info->results_per_page);
 
404
    $show_next = ($info->number_of_results > $info->results_per_page);
 
405
    if ($show_prev) {
 
406
        $i2 = clone $info;
 
407
        $i2->offset = $info->offset - $info->results_per_page;
 
408
        $url = result_page_url($i2);
 
409
        echo "<a href=$url>".tra("Previous")." ".$info->results_per_page."</a>";
290
410
    }
291
 
    if (($offset >= $results_per_page) && ($number_of_results > $results_per_page)) {
 
411
    if ($show_prev && $show_next) {
292
412
        echo "&nbsp;|&nbsp;";
293
413
    }
294
 
    if ($number_of_results > $results_per_page) {
295
 
        $offset_n = $offset+$results_per_page;
296
 
        echo "<a href=results.php?$clause&offset=$offset_n>Next $results_per_page</a></center><br>";
297
 
    } else {
298
 
        echo "</center><br><br>";
299
 
    }
 
414
    if ($show_next) {
 
415
        $i2 = clone $info;
 
416
        $i2->offset = $info->offset + $info->results_per_page;
 
417
        $url = result_page_url($i2);
 
418
        echo "<a href=$url>".tra("Next")." ".$info->results_per_page."</a>";
 
419
    }
 
420
    echo "<br>".tra("Show").": ";
 
421
    for ($i=0; $i<NSTATES; $i++) {
 
422
        if ($i) echo " | ";
 
423
        if ($info->state == $i) {
 
424
            echo $state_name[$i];
 
425
        } else {
 
426
            $i2 = clone $info;
 
427
            $i2->state = $i;
 
428
            $i2->offset = 0;
 
429
            $url = result_page_url($i2);
 
430
            echo "<a href=$url>".$state_name[$i]."</a>";
 
431
        }
 
432
    }
 
433
    
 
434
    $apps = BoincApp::enum('deprecated=0 ORDER BY user_friendly_name');
 
435
    if (count($apps) > 1) {
 
436
        $i2 = clone $info;
 
437
        $i2->offset = 0;
 
438
        echo '<br />';
 
439
        if ($info->appid) {
 
440
            $i2->appid = 0;
 
441
            $url = result_page_url($i2);
 
442
            echo '<a href="'.$url.'">All</a>';
 
443
        } else {
 
444
            echo 'All';
 
445
        }
 
446
        
 
447
        foreach ($apps as $app) {
 
448
            $i2->appid = $app->id;
 
449
            $url = result_page_url($i2);
 
450
            echo ' | ';
 
451
            if ($info->appid == $app->id) {
 
452
                echo $app->user_friendly_name;
 
453
            } else {
 
454
                echo '<a href="'.$url.'">'.$app->user_friendly_name.'</a>';
 
455
            }
 
456
        }
 
457
    }
 
458
 
 
459
    echo "</center><br>";
300
460
}
301
461
 
302
 
$cvs_version_tracker[]="\$Id: result.inc 15771 2008-08-07 20:43:52Z davea $";  //Generated automatically - do not edit
 
462
$cvs_version_tracker[]="\$Id: result.inc 22340 2010-09-13 16:12:00Z Rytis $";  //Generated automatically - do not edit
303
463
 
304
464
?>