This code of custom assimilator:
#include <vector>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <pcrecpp.h>
#include "boinc_db.h"
#include "error_numbers.h"
#include "filesys.h"
#include "sched_msgs.h"
#include "validate_util.h"
#include "sched_config.h"
#include "sched_util.h"
extern bool noinsert;
extern bool update_db;
#define RESULTS_PATH "bwaccumdir"
using namespace std;
using namespace pcrecpp;
int save_result_files(WORKUNIT& wu, vector<RESULT>& results)
{
int retval;
unsigned int i, j;
char basepath[1024];
sprintf(basepath, RESULTS_PATH"/%s", wu.name);
retval = boinc_mkdir(config.project_path(basepath));
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to create directory for results %s
(%s)\n", basepath, boincerror(retval));
return retval;
}
for (i=0; i<results.size(); i++)
{
RESULT& result = results[i];
vector<FILE_INFO> output_files;
string copy_path;
get_output_file_infos(result, output_files);
unsigned int nFiles = output_files.size();
log_messages.printf(MSG_DEBUG, "ASSIMILATING %d files for result %s\n",
nFiles, result.name);
DB_RESULT res;
res = result;
char additional_xml[1024];
memset(additional_xml, 0, sizeof(additional_xml));
strcat(additional_xml, "<result_files>\n");
bool file_copied = false;
for (j=0; j<nFiles; j++)
{
FILE_INFO& fi = output_files[j];
if (nFiles == 1)
copy_path = config.project_path("%s/%s_%d", basepath, wu.name, i);
else
copy_path = config.project_path("%s/%s_%d_%d", basepath. wu.name, i, j);
log_messages.printf(MSG_DEBUG, "COPYING file %s to %s\n", fi.name.c_str(),
copy_path.c_str());
if (boinc_copy(fi.path.c_str(), copy_path.c_str()) == 0)
{
char tmp[1024];
sprintf(tmp, "\t<result_file>%s</result_file>\n", copy_path.c_str());
strcat(additional_xml, tmp);
file_copied = true;
}
else
{
if (!fi.optional)
log_messages,printf(MSG_NORMAL, "Could not copy file %s\n", fi.name.c_str());
}
}
strcat(additional_xml, "</result_file>\n");
strcat(res.xml_doc_out, additional_xml);
if (update_db)
{
retval = res.update();
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to update result %s (%s)\n",
result.name, boincerror(retval));
return retval;
}
}
}
return 0;
}
int assimilate_handler(WORKUNIT& wu, vector<RESULT>& results, RESULT&
canonical_result)
{
int retval;
log_messages.printf(MSG_NORMAL, "ASSIMILATING %d results for WU %s\n",
results.size(), wu.name);
retval = save_result_files(wu, results);
if (retval)
{
log_messages.printf(MSG_CRITICAL, "FAILED to save result files\n");
return retval;
}
return 0;
}
This is makefile:
S += assimilator.cpp validate_util.cpp izet_assimilator.cpp
BOINC = /home/boincadm/boinc
INCLUDES = -I. -I $(BOINC) -I $(BOINC)/lib -I $(BOINC)/api -I $(BOINC)/db -I
$(BOINC)/client -I $(BOINC)/tools -I $(BOINC)/sched -I /usr/include/mysql
LIBRARIES = $(BOINC)/sched/libsched.a $(BOINC)/api/libboinc_api.a
$(BOINC)/lib/libboinc.a
all:
g++ -O2 -Wall -static -o izet_assimilator $(S) $(INCLUDES) $(LIBRARIES)
This is error output:
boincadm@debian-test-x64:~/prj/izet_assimilator$ make
g++ -O2 -Wall -static -o izet_assimilator assimilator.cpp validate_util.cpp
izet_assimilator.cpp -I. -I /home/boincadm/boinc -I /home/boincadm/boinc/lib -I
/home/boincadm/boinc/api -I /home/boincadm/boinc/db -I
/home/boincadm/boinc/client -I /home/boincadm/boinc/tools -I
/home/boincadm/boinc/sched -I /usr/include/mysql
/home/boincadm/boinc/sched/libsched.a /home/boincadm/boinc/api/libboinc_api.a
/home/boincadm/boinc/lib/libboinc.a
izet_assimilator.cpp: In function ‘int save_result_files(WORKUNIT&,
std::vector<RESULT, std::allocator<RESULT> >&)’:
izet_assimilator.cpp:58: error: request for member ‘wu’ in ‘basepath’, which is
of non-class type ‘char [1024]’
izet_assimilator.cpp:70: error: cannot convert ‘<anonymous enum>’ to ‘const
char*’ for argument ‘1’ to ‘int printf(const char*, ...)’
izet_assimilator.cpp: In function ‘int assimilate_handler(WORKUNIT&,
std::vector<RESULT, std::allocator<RESULT> >&, RESULT&)’:
izet_assimilator.cpp:91: warning: format ‘%d’ expects type ‘int’, but argument
4 has type ‘size_t’
make: *** [all] Error 1
_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.