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.

Reply via email to