FOSSredder 0.5.0
Loading...
Searching...
No Matches
JobManager.h
Go to the documentation of this file.
1
5
6#pragma once
7
9
10#include <atomic>
11#include <deque>
12#include <functional>
13#include <memory>
14#include <mutex>
15#include <optional>
16#include <string>
17#include <unordered_map>
18#include <vector>
19
21class IErrorReporter;
22}
23
24namespace core::jobs {
25
27public:
32 explicit JobManager(std::shared_ptr<core::ports::diagnostics::IErrorReporter> errorReporter);
33
39 JobId submit(JobKind kind);
40
48
54 void unsubscribe(const JobId& id, SubscriptionId subId);
55
60 void cancel(const JobId& id);
61
66 void pause(const JobId& id);
67
72 void resume(const JobId& id);
73
79 std::optional<JobSnapshot> snapshot(const JobId& id) const;
80
86 std::shared_ptr<std::atomic<bool>> cancelFlag(const JobId& id) const;
87
93 std::shared_ptr<std::atomic<bool>> pauseFlag(const JobId& id) const;
94
99 void publish(const JobEvent& ev);
100
106 void fail(const JobId& id, const std::string& error);
107
112 void finish(const JobId& id);
113
118 void start(const JobId& id);
119
120private:
125 void prune(std::size_t maxJobs);
126
127 struct JobData {
128 JobSnapshot snap;
129 std::shared_ptr<std::atomic<bool>> cancel;
130 std::shared_ptr<std::atomic<bool>> pause;
131 std::unordered_map<SubscriptionId, JobEventCallback> subs;
132 SubscriptionId nextSub = 1;
133 mutable std::mutex m;
134 };
135
140 static JobId makeJobId();
141
142 static constexpr std::size_t kMaxJobs = 64;
143
144 std::unordered_map<JobId, std::shared_ptr<JobData>> jobs_;
145 std::deque<JobId> order_;
146 mutable std::mutex jobsMutex_;
147 std::shared_ptr<core::ports::diagnostics::IErrorReporter> errorReporter_;
148};
149
150}
Defines shared job identifiers, states, events, and snapshots.
std::shared_ptr< std::atomic< bool > > pauseFlag(const JobId &id) const
Retrieve a job pause flag.
void finish(const JobId &id)
Mark a job as finished.
void start(const JobId &id)
Mark a job as running.
void cancel(const JobId &id)
Mark a job as canceled and set its cancellation flag.
void publish(const JobEvent &ev)
Publish an event to subscribers and update the stored snapshot.
void resume(const JobId &id)
Resume a paused job and clear its pause flag.
JobId submit(JobKind kind)
Create a tracked job in the pending state.
std::shared_ptr< std::atomic< bool > > cancelFlag(const JobId &id) const
Retrieve a job cancellation flag.
SubscriptionId subscribe(const JobId &id, JobEventCallback cb)
Subscribe to events for a job.
void fail(const JobId &id, const std::string &error)
Mark a job as failed.
void pause(const JobId &id)
Mark a running job as paused and set its pause flag.
void unsubscribe(const JobId &id, SubscriptionId subId)
Remove a job event subscription.
std::optional< JobSnapshot > snapshot(const JobId &id) const
Retrieve the latest state snapshot for a job.
JobManager(std::shared_ptr< core::ports::diagnostics::IErrorReporter > errorReporter)
Create a manager for generic job state and event delivery.
Port for reporting structured diagnostic error events.
std::uint64_t SubscriptionId
Identifier for a job event subscription.
Definition JobTypes.h:88
std::string JobId
Stable identifier for one tracked job.
Definition JobTypes.h:21
JobKind
Classifies the high-level type of job.
Definition JobTypes.h:26
std::function< void(const JobEvent &)> JobEventCallback
Callback invoked for published job events.
Definition JobTypes.h:93
Event emitted when a job changes state or progress.
Definition JobTypes.h:52
Snapshot of the latest known job state.
Definition JobTypes.h:70