2020-03-30 17:10:04 +00:00
|
|
|
pub mod apub;
|
2020-05-21 23:04:12 +00:00
|
|
|
mod cache_media;
|
2020-03-21 20:24:05 +00:00
|
|
|
mod deliver;
|
|
|
|
mod deliver_many;
|
2020-03-23 03:52:42 +00:00
|
|
|
mod instance;
|
|
|
|
mod nodeinfo;
|
|
|
|
mod process_listeners;
|
2020-03-22 21:18:36 +00:00
|
|
|
mod storage;
|
2020-03-30 17:10:04 +00:00
|
|
|
|
2020-03-23 03:52:42 +00:00
|
|
|
pub use self::{
|
2020-05-21 23:04:12 +00:00
|
|
|
cache_media::CacheMedia, deliver::Deliver, deliver_many::DeliverMany, instance::QueryInstance,
|
|
|
|
nodeinfo::QueryNodeinfo,
|
2020-03-23 03:52:42 +00:00
|
|
|
};
|
2020-03-21 20:24:05 +00:00
|
|
|
|
|
|
|
use crate::{
|
2020-03-26 03:26:45 +00:00
|
|
|
config::Config,
|
|
|
|
data::{ActorCache, Media, NodeCache, State},
|
2020-03-22 21:18:36 +00:00
|
|
|
db::Db,
|
2020-03-21 20:24:05 +00:00
|
|
|
error::MyError,
|
2020-04-21 00:56:50 +00:00
|
|
|
jobs::{process_listeners::Listeners, storage::Storage},
|
2020-03-21 20:24:05 +00:00
|
|
|
requests::Requests,
|
|
|
|
};
|
2020-03-25 22:10:10 +00:00
|
|
|
use background_jobs::{Job, QueueHandle, WorkerConfig};
|
2020-03-23 03:52:42 +00:00
|
|
|
use std::time::Duration;
|
2020-03-21 20:24:05 +00:00
|
|
|
|
2020-03-22 21:18:36 +00:00
|
|
|
pub fn create_server(db: Db) -> JobServer {
|
2020-03-23 03:52:42 +00:00
|
|
|
let shared = background_jobs::create_server(Storage::new(db));
|
|
|
|
|
2020-03-25 22:10:10 +00:00
|
|
|
shared.every(Duration::from_secs(60 * 5), Listeners);
|
2020-03-23 03:52:42 +00:00
|
|
|
|
2020-03-25 22:10:10 +00:00
|
|
|
JobServer::new(shared)
|
2020-03-21 20:24:05 +00:00
|
|
|
}
|
|
|
|
|
2020-03-26 03:26:45 +00:00
|
|
|
pub fn create_workers(
|
2020-03-30 17:10:04 +00:00
|
|
|
db: Db,
|
2020-03-26 03:26:45 +00:00
|
|
|
state: State,
|
|
|
|
actors: ActorCache,
|
|
|
|
job_server: JobServer,
|
|
|
|
media: Media,
|
|
|
|
config: Config,
|
|
|
|
) {
|
2020-03-23 03:52:42 +00:00
|
|
|
let remote_handle = job_server.remote.clone();
|
|
|
|
|
2020-03-26 03:26:45 +00:00
|
|
|
WorkerConfig::new(move || {
|
|
|
|
JobState::new(
|
2020-03-30 17:10:04 +00:00
|
|
|
db.clone(),
|
2020-03-26 03:26:45 +00:00
|
|
|
state.clone(),
|
|
|
|
actors.clone(),
|
|
|
|
job_server.clone(),
|
|
|
|
media.clone(),
|
|
|
|
config.clone(),
|
|
|
|
)
|
|
|
|
})
|
2020-04-21 00:56:50 +00:00
|
|
|
.register::<Deliver>()
|
2020-04-21 17:15:33 +00:00
|
|
|
.register::<DeliverMany>()
|
2020-04-21 00:56:50 +00:00
|
|
|
.register::<QueryNodeinfo>()
|
|
|
|
.register::<QueryInstance>()
|
|
|
|
.register::<Listeners>()
|
2020-05-21 23:04:12 +00:00
|
|
|
.register::<CacheMedia>()
|
2020-04-21 00:56:50 +00:00
|
|
|
.register::<apub::Announce>()
|
|
|
|
.register::<apub::Follow>()
|
|
|
|
.register::<apub::Forward>()
|
|
|
|
.register::<apub::Reject>()
|
|
|
|
.register::<apub::Undo>()
|
|
|
|
.set_worker_count("default", 4)
|
2020-03-26 03:26:45 +00:00
|
|
|
.start(remote_handle);
|
2020-03-21 20:24:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
pub struct JobState {
|
2020-03-30 17:10:04 +00:00
|
|
|
db: Db,
|
2020-03-21 20:24:05 +00:00
|
|
|
requests: Requests,
|
2020-03-23 03:52:42 +00:00
|
|
|
state: State,
|
2020-03-23 22:17:53 +00:00
|
|
|
actors: ActorCache,
|
2020-03-26 03:26:45 +00:00
|
|
|
config: Config,
|
|
|
|
media: Media,
|
2020-03-23 03:52:42 +00:00
|
|
|
node_cache: NodeCache,
|
2020-03-21 20:24:05 +00:00
|
|
|
job_server: JobServer,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
pub struct JobServer {
|
2020-03-23 03:52:42 +00:00
|
|
|
remote: QueueHandle,
|
2020-03-21 20:24:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl JobState {
|
2020-03-26 03:26:45 +00:00
|
|
|
fn new(
|
2020-03-30 17:10:04 +00:00
|
|
|
db: Db,
|
2020-03-26 03:26:45 +00:00
|
|
|
state: State,
|
|
|
|
actors: ActorCache,
|
|
|
|
job_server: JobServer,
|
|
|
|
media: Media,
|
|
|
|
config: Config,
|
|
|
|
) -> Self {
|
2020-03-21 20:24:05 +00:00
|
|
|
JobState {
|
2020-03-23 03:52:42 +00:00
|
|
|
requests: state.requests(),
|
|
|
|
node_cache: state.node_cache(),
|
2020-03-30 17:10:04 +00:00
|
|
|
db,
|
2020-03-23 22:17:53 +00:00
|
|
|
actors,
|
2020-03-26 03:26:45 +00:00
|
|
|
config,
|
|
|
|
media,
|
2020-03-23 03:52:42 +00:00
|
|
|
state,
|
2020-03-21 20:24:05 +00:00
|
|
|
job_server,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl JobServer {
|
2020-03-25 22:10:10 +00:00
|
|
|
fn new(remote_handle: QueueHandle) -> Self {
|
2020-03-21 20:24:05 +00:00
|
|
|
JobServer {
|
2020-03-23 03:52:42 +00:00
|
|
|
remote: remote_handle,
|
2020-03-21 20:24:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-23 03:52:42 +00:00
|
|
|
pub fn queue<J>(&self, job: J) -> Result<(), MyError>
|
|
|
|
where
|
|
|
|
J: Job,
|
|
|
|
{
|
|
|
|
self.remote.queue(job).map_err(MyError::Queue)
|
2020-03-21 20:24:05 +00:00
|
|
|
}
|
|
|
|
}
|