15 std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
23 for (
int iType = EQueueType::pending; iType < EQueueType::all; iType++) {
24 for (
auto iTask :
mTasks[iType]) {
26 iTask.second =
nullptr;
42 SPD_CRIT(
"EQueueType is out of range [{}]",
static_cast<int>(type));
47 mUid = pTaskInfo->clientid();
48 mGid = pTaskInfo->groupid();
51 mTasks[type].insert(std::make_pair(
id, pTaskInfo));
62 return moveTask(
id,
nullptr, from, to);
70 auto iFound =
mTasks[from].find(
id);
71 if (iFound !=
mTasks[from].end()) {
72 if (pTaskInfo ==
nullptr) {
73 pTaskInfo = iFound->second;
76 delete iFound->second;
82 if (to < EQueueType::done && from != EQueueType::assigned)
mChanged =
true;
84 mTasks[from].erase(iFound);
91 SPD_WARN(
"Job with id [{}] was not found in queue [{}] !!!",
static_cast<int>(
id),
static_cast<int>(from));
103 auto found =
mTasks[from].find(
id);
104 if (found !=
mTasks[from].end()) {
107 mTasks[from].erase(found);
120 auto iAvailTask =
mTasks[EQueueType::pending].begin();
121 if (iAvailTask ==
mTasks[EQueueType::pending].end()) {
125 TaskInfo * pNewTask = iAvailTask->second;
126 moveTask(iAvailTask->first, EQueueType::pending, EQueueType::assigned);
136 for (
auto task :
mTasks[type]) {
137 targetVec.push_back(task.second);
167 SPD_DEBUG(
"{} P[{}] A[{}] R[{}] D[{}] F[{}] started[{}] finished[{}]",
mUUID,
mTasks[EQueueType::pending].
size(),
183 Json::UInt64 ts =
static_cast<Json::UInt64
>(
mTimeStarted);
185 d[
"time"][
"started"] = ts;
186 if (tf) d[
"time"][
"finished"] = tf;
187 d[
"P"] =
static_cast<Json::Value::UInt64
>(
mTasks[EQueueType::pending].size());
189 d[
"R"] =
static_cast<Json::Value::UInt64
>(
mTasks[EQueueType::running].size() +
mTasks[EQueueType::assigned].
size());
190 d[
"D"] =
static_cast<Json::Value::UInt64
>(
mTasks[EQueueType::done].size());
191 d[
"F"] =
static_cast<Json::Value::UInt64
>(
mTasks[EQueueType::failed].size());
193 d[
"rc"][
"done"] = Json::arrayValue;
194 d[
"rc"][
"failed"] = Json::arrayValue;
196 for (
auto ti :
mTasks[EQueueType::done]) {
197 d[
"rc"][
"done"].append(ti.second->taskid());
199 for (
auto ti :
mTasks[EQueueType::failed]) {
200 d[
"rc"][
"failed"].append(ti.second->taskid());
213 if (type >= EQueueType::all) {
214 size_t sum =
mTasks[EQueueType::pending].size();
215 sum +=
mTasks[EQueueType::assigned].size();
216 sum +=
mTasks[EQueueType::running].size();
217 sum +=
mTasks[EQueueType::done].size();
218 sum +=
mTasks[EQueueType::failed].size();
223 return mTasks[type].size();
232 size_t sum =
mTasks[EQueueType::pending].size();
233 sum +=
mTasks[EQueueType::assigned].size();
234 sum +=
mTasks[EQueueType::running].size();
277 return !
mTasks[Job::pending].empty();
290 std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch())
bool mJustFinished
Flag if job is finished. Note that it is reported only once.
bool haveMoreTasks() const
Task statuses.
bool addTask(uint32_t id, TaskInfo *pJob, EQueueType type)
void tasks(std::vector< TaskInfo * > &v, EQueueType type, bool clear=true)
std::string consumer() const
void json(Json::Value &json)
std::map< uint32_t, TaskInfo * > mTasks[all]
Lists of jobs.
size_t sizeNotFinished() const
uint64_t mTimeFinished
Time finished.
std::string mUUID
Job UUID.
std::string mType
Job type.
bool moveTask(uint32_t id, EQueueType from, EQueueType to)
Job(std::string uuid="", std::string type="NONE")
size_t size(EQueueType t=all) const
uint64_t mTimeStarted
Time started.
bool isJustFinished()
Returns if job was just finished.
std::string mFeederUUID
Feeder UUID.
bool mChanged
Flag if job was changed.
uint32_t JobID_t
Job ID type alias.
bool removeTask(uint32_t id, EQueueType from)
std::string mConsumerUUID
Source (consumer) UUID.
std::string feeder() const
uint32_t mUid
Job user id (nobody : 99)
uint32_t mGid
Job group id (nogroup : 99)
size_t mMaxIdsInJson
Maximum number when joh ids are produced in json.
bool isFinished()
Returns if jobs is finished.
std::string uuid() const
returns UUID
bool isTaskInQueue(uint32_t id, EQueueType type) const
Check task presence in certain queue.