- if(lev == 0) { /* use latest level 0, should do extrapolation */
- long est_size = 0;
- int nb_est = 0;
-
- for(j=NB_HISTORY-2;j>=0;j--) {
- if(info.history[j].level == 0) {
- if(info.history[j].size < 0) continue;
- est_size = info.history[j].size;
- nb_est++;
- }
- }
- if(nb_est > 0) {
- est(dp)->est_size[i] = est_size;
- }
- else if(info.inf[lev].size > 1000) { /* stats */
- est(dp)->est_size[i] = info.inf[lev].size;
- }
- else {
- est(dp)->est_size[i] = 1000000;
+ server_estimate(dp, i, &info, lev);
+ }
+ g_fprintf(stderr,_("%s time %s: got result for host %s disk %s:"),
+ get_pname(), walltime_str(curclock()),
+ dp->host->hostname, qname);
+ g_fprintf(stderr,_(" %d -> %lldK, %d -> %lldK, %d -> %lldK\n"),
+ est(dp)->estimate[0].level,
+ (long long)est(dp)->estimate[0].nsize,
+ est(dp)->estimate[1].level,
+ (long long)est(dp)->estimate[1].nsize,
+ est(dp)->estimate[2].level,
+ (long long)est(dp)->estimate[2].nsize);
+ if (!am_has_feature(hostp->features, fe_xml_estimate)) {
+ est(dp)->state = DISK_DONE;
+ remove_disk(&startq, dp);
+ enqueue_disk(&estq, dp);
+ }
+ }
+
+ estimate = ES_SERVER;
+ for (el = dp->estimatelist; el != NULL; el = el->next) {
+ estimate = (estimate_t)GPOINTER_TO_INT(el->data);
+ if (estimate == ES_CLIENT || estimate == ES_CALCSIZE)
+ break;
+ }
+ if (estimate == ES_CLIENT ||
+ estimate == ES_CALCSIZE ||
+ (am_has_feature(hostp->features, fe_req_xml) &&
+ am_has_feature(hostp->features, fe_xml_estimate))) {
+ nb_client++;
+ i = 0;
+
+ if (am_has_feature(hostp->features, fe_req_xml)) {
+ char *levelstr = NULL;
+ char *spindlestr = NULL;
+ char level[NUM_STR_SIZE];
+ char spindle[NUM_STR_SIZE];
+ char *o;
+ char *l;
+ info_t info;
+
+ get_info(dp->host->hostname, dp->name, &info);
+ for(i = 0; i < MAX_LEVELS; i++) {
+ char *server;
+ int lev = est(dp)->estimate[i].level;
+ if (lev == -1) break;
+ g_snprintf(level, SIZEOF(level), "%d", lev);
+ if (am_has_feature(hostp->features, fe_xml_level_server) &&
+ server_can_do_estimate(dp, &info, lev)) {
+ server = "<server>YES</server>";
+ } else {
+ server = "";