PipelineFX Forum
Qube! => Developer Customization => Topic started by: methodhai on November 06, 2007, 03:09:03 AM
-
Hi,
I was wondering if how to setup a query filter in the C++ API for qbjobinfo so that it only returns a job starting from a particular date? e.g. I want it to only return a list of jobs for the last 7 days.
...also..I'm sure this has been asked before - but I couldn't find it searching through the forums - is it possible for me to get a list of all the tasks that the farm is working on at the moment?
Thanks,
Hai
-
Hey Hai,
I'm gonna reply to this one in 2 parts. The first one is in answer to your first question. In order to get a list of jobs "pre-filtered" at the supervisor, you must create a QbQuery object with a filter attached to it.
If you're already familiar with binding to our libraries, then the following snippit will be useful:
QbQuery query;
// we need to grab the current time.
QbTime now;
now.setToNow();
// create a new time filter
QbFilter *timeFilter = QB_NULL;
timeFilter = new QbFilter("timecomplete", '>', now.value() - QB_TIME_WEEK);
// add filter to the query
query.filters().push(timeFilter);
/*
we pass the query object into the qbjobinfo routine and
the result if successful will be placed in the 'jobs' object.
we return a QB_TRUE on success and QB_FALSE on an error.
*/
QbJobList jobs;
if (!qbjobinfo(query, jobs)) {
cout << "ERROR: couldn't obtain data from supervisor." << endl;
exit(1);
}
-
In answer to part 2, we need to filter the data ourselves a little bit.
QbQuery query;
// create a status filter
QbFilter *runFilter = QB_NULL;
runFilter = new QbFilter("status", QB_STATUS_RUNNING);
// add filter to the query
query.filters().push(runFilter);
// we'll also ask the supervisor to attach all frames to the query
query.fields().push(new QbField("work"));
/*
we pass the query object into the qbjobinfo routine and
the result if successful will be placed in the 'jobs' object.
we return a QB_TRUE on success and QB_FALSE on an error.
*/
QbJobList jobs;
if (!qbjobinfo(query, jobs)) {
cout << "ERROR: couldn't obtain data from supervisor." << endl;
exit(1);
}
for (QB_INT i = 0; i < jobs.length(); i++) {
QbJob* job = jobs.get(i);
if (job == NULL)
continue;
for (QB_INT j = 0; j < job->agenda().length(); j++) {
QbWork* work = job->agenda().get(j);
if (work == NULL)
continue;
// skip all agenda items not currently running or waiting
if (!work->assigned())
continue;
cout << "Job Id: " << job->id() << ":" << work->name() << endl;
}
}
-
Thanks Anthony!
This is extremely useful.