. // utility for studying the credit system error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); require_once("../inc/util.inc"); require_once("../inc/util_ops.inc"); require_once("../inc/boinc_db.inc"); define('COBB_SCALE', 200/86400e9); function gavid($avid, $appid) { if ($avid < 0) { return $appid*1000000 - $avid; } return $avid; } function show_res($r, $w) { $gavid = gavid($r->app_version_id, $w->appid); $hav = BoincHostAppVersion::lookup($r->hostid, $gavid); $av = BoincAppVersion::lookup_id($r->app_version_id); $raw_credit = $r->elapsed_time*$r->flops_estimate*COBB_SCALE; echo "
Result ID: id>$r->id
Host: hostid&avid=$r->app_version_id>$r->hostid
elapsed_time: $r->elapsed_time
flops_estimate: ".$r->flops_estimate/1e9."
app_version_id: $r->app_version_id
";
    if ($av) {
        $host_scale = $av->pfc_avg/$hav->pfc_avg;
        $av_scale = $av->pfc_scale;
        echo "app version scale: $av->pfc_scale\n";
    } else {
        $host_scale = 1;
        $av_scale = 1;
    }
    echo "host scale: $host_scale
Credit:
    Original: $r->claimed_credit
    Raw: $raw_credit
    Scaled: ".$raw_credit*$host_scale*$av_scale."
    Granted: $r->granted_credit
";
    if ($hav) {
        echo "Host app version:
    PFC avg: $hav->pfc_avg
";
    }
}

function handle_result($resultid) {
    $r = BoincResult::lookup_id($resultid);
    $w = BoincWorkunit::lookup_id($r->workunitid);
    $rs = BoincResult::enum("workunitid=$r->workunitid and validate_state=1");
    $app_version_ids = array();
    foreach ($rs as $r) {
        show_res($r, $w);
        $app_version_ids[] = $r->app_version_id;
    }
    $app_version_ids = array_unique($app_version_ids);
    foreach ($app_version_ids as $avid) {
        show_av($avid);
    }
}

function show_host_av($host_id, $av_id) {
    $hav = BoincHostAppVersion::lookup("host_id=$host_id and app_version_id=$av_id");
    page_head("Host $host_id / app_version $av_id credit");
    echo "Results";
    $rs = BoincResult::enum("hostid=$host_id and app_version_id=$av_id and validate_state=1 order by id desc limit 100");
    start_table();
    table_header("Workunit", "Elapsed", "Proj FLOPS", "Raw credit", "granted");
    $n = 0;
    $total=0;
    foreach($rs as $r) {
        $raw_credit = $r->elapsed_time*$r->flops_estimate*COBB_SCALE;
        $n++;
        $total += $raw_credit;
        table_row(
            "workunitid>$r->workunitid",
            $r->elapsed_time,
            $r->projected_flops,
            $raw_credit,
            $r->granted_credit
        );
    }

    start_table();
    row2("PFC nsamples", $hav->pfc_n);
    row2("PFC avg", $hav->pfc_avg);
    row2("Average raw credit", $total/$n);
    end_table();

    page_tail();
}

function av_string($av_id) {
    if ($av_id> 0) {
        $av = BoincAppVersion::lookup($av_id);
        $plat = BoincPlatform::lookup_id($av->platformid);
        $x = "$plat->name $av->plan_class";
    } else {
        $x = "Anonymous platform";
    }
    return $x;
}

function show_wu($wu_id) {
    page_head("Workunit credit");
    $wu = BoincWorkunit::lookup_id($wu_id);
    $app = BoincApp::lookup_id($wu->appid);
    start_table();
    row2("App", "id>$app->user_friendly_name");
    end_table();
    echo "Results";
    start_table();
    table_header("Host", "App version", "Elapsed", "FLOPS est");
    $results = BoincResult::enum("workunitid=$wu->id and validate_state=1");
    foreach ($results as $r) {
        table_row(
            "hostid>$r->hostid",
            av_string($r->app_version_id),
            $r->elapsed_time,
            $r->flops_estimate
        );
    }
    end_table();
    page_tail();
}

function show_av($av_id) {
    $av = BoincAppVersion::lookup_id($av_id);
    $app = BoincApp::lookup_id($av->appid);
    $plat = BoincPlatform::lookup_id($av->platformid);
    $av_desc = "$plat->name $av->plan_class";
    page_head("App version $av_desc credit");

    start_table();
    row2("PFC samples", $av->pfc_n);
    row2("PFC average", $av->pfc_avg);
    row2("PFC scale", $av->pfc_scale);
    row2("App", $app->user_friendly_name);
    end_table();

    $results = BoincResult::enum("app_version_id=$av_id and validate_state=1");
    start_table();
    table_header("Host/App_version", "Elapsed", "FLOPS est");
    foreach ($results as $r) {
        $avs = av_string($r->app_version_id);
        table_row(
            "hostid&a_id=$r->app_version_id> host $r->hostid AV $avs",
            $r->elapsed_time,
            $r->flops_estimate
        );
    }
    end_table();
    page_tail();
}

function show_appl($app_id) {
    $app = BoincApp::lookup_id($app_id);
    page_head("App $app->user_friendly_name credit");
    $avs = BoincAppVersion::enum("appid=$app_id and deprecated=0");
    start_table();
    table_header("platform/class/version", "PFC nsamples", "PFC avg", "PFC scale");
    $avs = current_versions($avs);
    foreach ($avs as $av) {
        $plat = BoincPlatform::lookup_id($av->platformid);
        table_row(
            "id>$plat->user_friendly_name $av->plan_class $av->version_num",
            $av->pfc_n,
            $av->pfc_avg,
            $av->pfc_scale
        );
    }
    end_table();
    page_tail();
}

$wu_id = get_int("wu_id", true);
$host_id = get_int("host_id", true);
$av_id = get_int("av_id", true);
$app_id = get_int("app_id", true);
if ($wu_id) {
    show_wu($wu_id);
    exit;
}
if ($host_id && $av_id) {
    show_host_av($host_id, $av_id);
    exit;
}
if ($av_id) {
    show_av($av_id);
    exit;
}
if ($app_id) {
    show_appl($app_id);
    exit;
}

error_page("no command");

?>