mirror of
https://git.asonix.dog/asonix/relay.git
synced 2024-11-25 11:01:11 +00:00
Add job flags
This commit is contained in:
parent
dabeba43e2
commit
97b5612717
4 changed files with 77 additions and 5 deletions
28
README.md
28
README.md
|
@ -7,6 +7,27 @@ To simply run the server, the command is as follows
|
||||||
$ ./relay
|
$ ./relay
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To learn about any other tasks, the `--help` flag can be passed
|
||||||
|
```bash
|
||||||
|
$ ./relay --help
|
||||||
|
relay 0.1.0
|
||||||
|
An activitypub relay
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
relay [FLAGS] [OPTIONS]
|
||||||
|
|
||||||
|
FLAGS:
|
||||||
|
-h, --help Prints help information
|
||||||
|
-j, --jobs-only Only process background jobs, do not start the relay server
|
||||||
|
-n, --no-jobs Only run the relay server, do not process background jobs
|
||||||
|
-u, --undo Undo whitelisting or blocking domains
|
||||||
|
-V, --version Prints version information
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-b <blocks>... A list of domains that should be blocked
|
||||||
|
-w <whitelists>... A list of domains that should be whitelisted
|
||||||
|
```
|
||||||
|
|
||||||
To add domains to the blocklist, use the `-b` flag and pass a list of domains
|
To add domains to the blocklist, use the `-b` flag and pass a list of domains
|
||||||
```bash
|
```bash
|
||||||
$ ./relay -b asonix.dog blimps.xyz
|
$ ./relay -b asonix.dog blimps.xyz
|
||||||
|
@ -22,7 +43,12 @@ $ ./relay -uw asonix.dog blimps.xyz
|
||||||
```
|
```
|
||||||
|
|
||||||
Whitelisted domains are only checked against incoming activities if `WHITELIST_MODE` is enabled.
|
Whitelisted domains are only checked against incoming activities if `WHITELIST_MODE` is enabled.
|
||||||
Blocks can be published in the nodeinfo metadata by settings `PUBLISH_BLOCKS` to true
|
Blocks can be published in the nodeinfo metadata by setting `PUBLISH_BLOCKS` to true
|
||||||
|
|
||||||
|
For advanced setups, it may be useful to run the relay API and the background tasks in separate
|
||||||
|
processes, possibly on separate hosts. The `-j` and `-n` flags have been provided for this purpose.
|
||||||
|
By passing `-n`, a relay can be spawned that handles no deliveries. By passing `-j`, a relay will
|
||||||
|
not be spawned, but any deliveries existing in the database will be processed.
|
||||||
|
|
||||||
### Subscribing
|
### Subscribing
|
||||||
Mastodon admins can subscribe to this relay by adding the `/inbox` route to their relay settings.
|
Mastodon admins can subscribe to this relay by adding the `/inbox` route to their relay settings.
|
||||||
|
|
24
src/args.rs
24
src/args.rs
|
@ -9,8 +9,22 @@ pub struct Args {
|
||||||
#[structopt(short, help = "A list of domains that should be whitelisted")]
|
#[structopt(short, help = "A list of domains that should be whitelisted")]
|
||||||
whitelists: Vec<String>,
|
whitelists: Vec<String>,
|
||||||
|
|
||||||
#[structopt(short, help = "Undo whitelisting or blocking these domains")]
|
#[structopt(short, long, help = "Undo whitelisting or blocking domains")]
|
||||||
undo: bool,
|
undo: bool,
|
||||||
|
|
||||||
|
#[structopt(
|
||||||
|
short,
|
||||||
|
long,
|
||||||
|
help = "Only process background jobs, do not start the relay server"
|
||||||
|
)]
|
||||||
|
jobs_only: bool,
|
||||||
|
|
||||||
|
#[structopt(
|
||||||
|
short,
|
||||||
|
long,
|
||||||
|
help = "Only run the relay server, do not process background jobs"
|
||||||
|
)]
|
||||||
|
no_jobs: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Args {
|
impl Args {
|
||||||
|
@ -29,4 +43,12 @@ impl Args {
|
||||||
pub fn undo(&self) -> bool {
|
pub fn undo(&self) -> bool {
|
||||||
self.undo
|
self.undo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn jobs_only(&self) -> bool {
|
||||||
|
self.jobs_only
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn no_jobs(&self) -> bool {
|
||||||
|
self.no_jobs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
26
src/main.rs
26
src/main.rs
|
@ -1,3 +1,4 @@
|
||||||
|
use actix::Arbiter;
|
||||||
use actix_web::{
|
use actix_web::{
|
||||||
http::header::{ContentType, Expires},
|
http::header::{ContentType, Expires},
|
||||||
middleware::Logger,
|
middleware::Logger,
|
||||||
|
@ -92,6 +93,12 @@ async fn main() -> Result<(), anyhow::Error> {
|
||||||
|
|
||||||
let args = Args::new();
|
let args = Args::new();
|
||||||
|
|
||||||
|
if args.jobs_only() && args.no_jobs() {
|
||||||
|
return Err(anyhow::Error::msg(
|
||||||
|
"Either the server or the jobs must be run",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
if !args.blocks().is_empty() || !args.whitelists().is_empty() {
|
if !args.blocks().is_empty() || !args.whitelists().is_empty() {
|
||||||
if args.undo() {
|
if args.undo() {
|
||||||
db.remove_blocks(args.blocks()).await?;
|
db.remove_blocks(args.blocks()).await?;
|
||||||
|
@ -110,9 +117,26 @@ async fn main() -> Result<(), anyhow::Error> {
|
||||||
|
|
||||||
let job_server = create_server(db.clone());
|
let job_server = create_server(db.clone());
|
||||||
|
|
||||||
|
if args.jobs_only() {
|
||||||
|
for _ in 0..num_cpus::get() {
|
||||||
|
let state = state.clone();
|
||||||
|
let job_server = job_server.clone();
|
||||||
|
|
||||||
|
Arbiter::new().exec_fn(move || {
|
||||||
|
create_workers(state, job_server);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
actix_rt::signal::ctrl_c().await?;
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
let no_jobs = args.no_jobs();
|
||||||
|
|
||||||
let bind_address = config.bind_address();
|
let bind_address = config.bind_address();
|
||||||
HttpServer::new(move || {
|
HttpServer::new(move || {
|
||||||
create_workers(state.clone(), job_server.clone());
|
if !no_jobs {
|
||||||
|
create_workers(state.clone(), job_server.clone());
|
||||||
|
}
|
||||||
|
|
||||||
App::new()
|
App::new()
|
||||||
.wrap(Logger::default())
|
.wrap(Logger::default())
|
||||||
|
|
|
@ -9,7 +9,7 @@ use futures::{
|
||||||
use log::{debug, error, info, warn};
|
use log::{debug, error, info, warn};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
async fn handle_notification(state: &State, notif: Notification) {
|
async fn handle_notification(state: State, notif: Notification) {
|
||||||
match notif.channel() {
|
match notif.channel() {
|
||||||
"new_blocks" => {
|
"new_blocks" => {
|
||||||
info!("Caching block of {}", notif.payload());
|
info!("Caching block of {}", notif.payload());
|
||||||
|
@ -88,7 +88,7 @@ pub fn spawn(state: State, config: &crate::config::Config) -> Result<(), MyError
|
||||||
});
|
});
|
||||||
|
|
||||||
while let Some(n) = stream.next().await {
|
while let Some(n) = stream.next().await {
|
||||||
handle_notification(&state, n).await;
|
actix::spawn(handle_notification(state.clone(), n));
|
||||||
}
|
}
|
||||||
|
|
||||||
drop(client);
|
drop(client);
|
||||||
|
|
Loading…
Reference in a new issue