// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see .
// An assimilator that runs a script to handle completed jobs,
// so that you can do assimilation in Python, PHP, Perl, bash, etc.
//
// cmdline args to this program:
// --script "scriptname arg1 ... argn"
//
// The script assimilates a completed job.
//
// arg1 ... argn represent cmdline args to be passed to the script.
// the options are:
//
// files list of output files of the job's canonical result
// wu_id workunit ID
// result_id ID of the canonical result
// runtime runtime of the canonical result
//
// if no args are specified, the script is invoked as
// scriptname wu_id files
//
// If the workunit has no canonical result (i.e. it failed)
// the script is invoked as
// scriptname --error N wu_id
// where N is an integer encoding the reasons for the job's failure
// (see WU_ERROR_* in html/inc/common_defs.inc)
#include
#include
#include
#include "boinc_db.h"
#include "error_numbers.h"
#include "sched_msgs.h"
#include "validate_util.h"
#include "validator.h"
#include "sched_config.h"
using std::vector;
using std::string;
bool first = true;
vector script;
void parse_cmdline() {
for (int i=1; i& /*results*/, RESULT& canonical_result
) {
int retval;
char cmd[4096], buf[256];
unsigned int i, j;
if (first) {
parse_cmdline();
first = false;
}
if (wu.canonical_resultid) {
sprintf(cmd, "../bin/%s", script[0].c_str());
vector paths;
retval = get_output_file_paths(canonical_result, paths);
if (retval) return retval;
for (i=1; i