gosh_remote/
lib.rs

1// [[file:../remote.note::dba9de5e][dba9de5e]]
2//! Distributed parallel computing over multiple nodes.
3// dba9de5e ends here
4
5// [[file:../remote.note::963f5eb8][963f5eb8]]
6use gosh_core::*;
7use gut::prelude::*;
8
9use std::path::{Path, PathBuf};
10// 963f5eb8 ends here
11
12// [[file:../remote.note::b21b77b4][b21b77b4]]
13mod base;
14mod client;
15mod rest;
16mod scheduler;
17mod server;
18mod worker;
19
20pub mod cli;
21pub mod task;
22
23// experimental
24mod jobhub;
25// b21b77b4 ends here
26
27// [[file:../remote.note::5f427630][5f427630]]
28mod common {
29    pub use gosh_core::gut::prelude::*;
30    pub use gosh_core::*;
31}
32// 5f427630 ends here
33
34// [[file:../remote.note::5c33a18a][5c33a18a]]
35/// Return system host name
36fn hostname() -> String {
37    nix::unistd::gethostname().unwrap().to_str().unwrap().to_string()
38}
39// 5c33a18a ends here
40
41// [[file:../remote.note::92bf67b7][92bf67b7]]
42use std::net::{SocketAddr, TcpListener, ToSocketAddrs};
43
44/// Test if `address` available for socket binding
45pub fn address_available<A: ToSocketAddrs>(address: A) -> bool {
46    match TcpListener::bind(address) {
47        Ok(_) => true,
48        Err(_) => false,
49    }
50}
51
52/// Return the address available for binding with the OS assigns port.
53pub fn get_free_tcp_address() -> Option<SocketAddr> {
54    let host = hostname();
55    TcpListener::bind(format!("{host}:0")).ok()?.local_addr().ok()
56}
57
58#[test]
59fn test_addr() {
60    let addr = get_free_tcp_address().unwrap();
61    assert!(address_available(dbg!(addr)));
62}
63// 92bf67b7 ends here
64
65// [[file:../remote.note::0a725e9c][0a725e9c]]
66pub use base::LockFile;
67
68pub use crate::client::Client;
69pub use crate::server::Server;
70pub use jobhub::JobHub;
71// 0a725e9c ends here
72
73// [[file:../remote.note::56d334b5][56d334b5]]
74#[cfg(feature = "adhoc")]
75/// Docs for local mods
76pub mod docs {
77    macro_rules! export_doc {
78        ($l:ident) => {
79            pub mod $l {
80                pub use crate::$l::*;
81            }
82        };
83    }
84
85    export_doc!(base);
86    export_doc!(worker);
87    export_doc!(jobhub);
88    export_doc!(rest);
89    export_doc!(task);
90}
91// 56d334b5 ends here