14 { .onNo = sched_onNoMatch,
15 .onFull = sched_onFullMatch,
16 .onDiff = sched_onDiffMatch,
17 .onBeginOutput = sched_noop,
18 .onBetweenIndividualOutputs = sched_noop,
19 .onEndOutput = sched_noop,
20 .ignore = sched_ignore
24 PGresult* fileIdResult =
queryFileIdsForUpload(state->dbManager, uploadId, state->ignoreFilesWithMimeType);
29 if (PQntuples(fileIdResult) == 0) {
30 PQclear(fileIdResult);
36 #ifdef MONK_MULTI_THREAD
41 MonkState* threadLocalState = &threadLocalStateStore;
43 threadLocalState->dbManager = fo_dbManager_fork(state->dbManager);
44 if (threadLocalState->dbManager) {
45 int count = PQntuples(fileIdResult);
46 #ifdef MONK_MULTI_THREAD
47 #pragma omp for schedule(dynamic)
49 for (
int i = 0; i < count; i++) {
53 long pFileId = atol(PQgetvalue(fileIdResult, i, 0));
55 if ((pFileId <= 0) || hasAlreadyResultsFor(threadLocalState->dbManager, threadLocalState->agentId, pFileId))
68 fo_dbManager_finish(threadLocalState->dbManager);
73 PQclear(fileIdResult);
80 state->scanMode = MODE_SCHEDULER;
86 if (uploadId == 0)
continue;
88 int arsId =
fo_WriteARS(fo_dbManager_getWrappedConnection(state->dbManager),
89 0, uploadId, state->agentId, AGENT_ARS, NULL, 0);
97 fo_WriteARS(fo_dbManager_getWrappedConnection(state->dbManager),
98 arsId, uploadId, state->agentId, AGENT_ARS, NULL, 1);
106 return saveNoResultToDb(state->dbManager, state->agentId, file->id);
111 const int agentId = state->agentId;
112 const long fileId = file->id;
115 printf(
"found full match between (pFile=%ld) and \"%s\" (rf_pk=%ld)\n", file->id,
license->shortname,
license->refId);
121 long licenseFileId = saveToDb(
dbManager, agentId,
license->refId, fileId, 100);
122 if (licenseFileId > 0) {
123 success = saveDiffHighlightToDb(
dbManager, matchInfo, licenseFileId);
136 const int agentId = state->agentId;
137 const long fileId = file->id;
139 unsigned short matchPercent = diffResult->percentual;
142 printf(
"found diff match between (pFile=%ld) and \"%s\" (rf_pk=%ld); ", file->id,
license->shortname,
license->refId);
143 printf(
"%u%%; ", diffResult->percentual);
145 char * formattedMatchArray = formatMatchArray(diffResult->matchedInfo);
146 printf(
"diffs: {%s}\n", formattedMatchArray);
147 free(formattedMatchArray);
153 long licenseFileId = saveToDb(
dbManager, agentId,
license->refId, fileId, matchPercent);
154 if (licenseFileId > 0) {
155 success = saveDiffHighlightsToDb(
dbManager, diffResult->matchedInfo, licenseFileId);
173 return hasAlreadyResultsFor(state->dbManager, state->agentId, file->id);
176 #pragma GCC diagnostic push
177 #pragma GCC diagnostic ignored "-Wunused-parameter"
181 #pragma GCC diagnostic pop
bool processUploadId(const CompatibilityState &state, int uploadId, CompatibilityDatabaseHandler &databaseHandler, int groupId)
int queryAgentId(DbManager &dbManager)
void matchPFileWithLicenses(CopyrightState const &state, int agentId, unsigned long pFileId, CopyrightDatabaseHandler &databaseHandler)
Get the file contents, scan for statements and save findings to database.
PGresult * queryFileIdsForUpload(fo_dbManager *dbManager, int uploadId, bool ignoreFilesWithMimeType)
Get all file IDs (pfile_fk) for a given upload.
FUNCTION int fo_WriteARS(PGconn *pgConn, int ars_pk, int upload_pk, int agent_pk, const char *tableName, const char *ars_status, int ars_success)
Write ars record.
void fo_scheduler_heart(int i)
This function must be called by agents to let the scheduler know they are alive and how many items th...
char * fo_scheduler_current()
Get the last read string from the scheduler.
char * fo_scheduler_next()
Get the next data to process from the scheduler.
fo_dbManager * dbManager
fo_dbManager object
Header file for the scheduler.