Commit graph

51 commits

Author SHA1 Message Date
hinto-janaiyo
f65ce9a1b8
main: allow [.] in [name] regex
[GUPAX_VERSION_UNDERSCORE] was used as the XMRig [Rig], which didn't
allow [.] (Gupax_v1.0.0), so allow for dots in the [name] regex.
2022-12-15 18:50:50 -05:00
hinto-janaiyo
d3bbe2ece2
cargo check/clippy fixes 2022-12-13 23:05:13 -05:00
hinto-janaiyo
2b80aa0277
v0.9.0
Fixes:
    - Up/Down only work if UI is enabled
    - Re-pushed [P2POOL_API_PATH] to popped relative path
      but only after giving the popped path to P2Pool
          1. [/tmp/gupax/p2pool/p2pool] -> [/tmp/gupax/p2pool]
          2. Give that to P2Pool
          3. [/tmp/gupax/p2pool] -> [/tmp/gupax/p2pool/local/stats]
          4. Give that to the watchdog (so it can read it)
2022-12-13 15:06:07 -05:00
hinto-janaiyo
9eb49b6dbd
p2pool/xmrig: handle custom arg [--no-color], API ip/port/path 2022-12-13 12:44:57 -05:00
hinto-janaiyo
79b0361152
helper/main: fix [Arc<Mutex>] deadlocks, add keyboard shortcuts
There was a deadlock happening between the [Helper]'s [gui_api_p2pool]
and the GUI's [gui_api_p2pool], since the locking order was different.
The watchdog loop locking order was fixed as well. This was a pain to
track down, better than a data race... I guess.

Oh and keyboard shortcuts were added in this commit too.

Comment from code:

// The ordering of these locks is _very_ important. They MUST be in sync
// with how the main GUI thread locks stuff or a deadlock will occur
// given enough time. They will eventually both want to lock the [Arc<Mutex>]
// the other thread is already locking. Yes, I figured this out the hard way,
// hence the vast amount of debug!() messages.
//
// Example of different order (BAD!):
//
// GUI Main       -> locks [p2pool] first
// Helper         -> locks [gui_api_p2pool] first
// GUI Status Tab -> trys to lock [gui_api_p2pool] -> CAN'T
// Helper         -> trys to lock [p2pool] -> CAN'T
//
// These two threads are now in a deadlock because both
// are trying to access locks the other one already has.
//
// The locking order here must be in the same chronological
// order as the main GUI thread (top to bottom).
2022-12-13 10:14:26 -05:00
hinto-janaiyo
128fa500bb
v0.9.0 (maybe) 2022-12-12 17:24:05 -05:00
hinto-janaiyo
bf4e39c3a5
status: link helper & GUI's XMRig API 2022-12-11 22:01:37 -05:00
hinto-janaiyo
e2f6d90476
helper/sudo: small p2pool api fixes, don't allow ESC when [testing] 2022-12-11 20:44:46 -05:00
hinto-janaiyo
1e2b8f7803
xmrig/status: implement API hyper/tokio call; add [Gupax] stats 2022-12-11 15:51:07 -05:00
hinto-janaiyo
81ec266e0a
gupax: add [Auto-P2Pool/XMRig] for running at Gupax startup 2022-12-10 23:10:26 -05:00
hinto-janaiyo
1b999e3d9b
main/helper: change [Start] button, change [Sudo] input order 2022-12-10 21:55:57 -05:00
hinto-janaiyo
929d80c61d
main: check for admin at init, good for windows, bad for unix 2022-12-09 22:06:42 -05:00
hinto-janaiyo
e7de536f18
windows: handle admin priviledge for xmrig
Please read the [src/README.md]. I hate windows so much.
2022-12-09 21:31:16 -05:00
hinto-janaiyo
6dbf0386c4
p2pool/xmrig: add address/path check before allowing [Start] 2022-12-08 20:25:41 -05:00
hinto-janaiyo
d30fb5563b
helper: optimize [String] output buffers
Instead of cloning the entirety of the process's output, this
commit adds a sort of hierarchy of string buffers:

We need:
1. The full output for stat parsing (max 1 month/56m bytes)
2. GUI output to be lightweight (max 1-2 hours/1m bytes)
3. GUI output buffered so it's on a refresh tick of 1 second

------------------------------------------------------------------
So this is the new buffer hierarchy, from low to high level:
[Process] <-> [Watchdog] <-> [Helper] <-> [GUI]
------------------------------------------------------------------
Process: Writes to 2 buffers, a FULL (stores everything) and
a BUF which is exactly the same, except this gets [mem:take]n later
Stuff gets written immediately if there is output detected.

Watchdog: [std::mem::take]'s [Process]'s BUF for itself.
Both FULL and BUF output overflows are checked in this loop.
This is done on a slightly faster tick (900ms).

Helper: Appends watchdog's BUF to GUI's already existing [String]
on a 1-second tick.

GUI: Does nothing, only locks & reads.
------------------------------------------------------------------

This means Helper's buffer will be swapped out every second, meaning
it'll almost always be empty. Process's FULL output will be the
heaviest, but is only used for backend parsing. GUI will be in the
middle. This system of buffers makes it so not every thread has to
hold it's own FULL copy of the output, in particular the GUI thread
was starting to lag a little due to loading so much output.
2022-12-08 12:29:38 -05:00
hinto-janaiyo
06f19043ed
sudo: add [try_wait()] 5 second loop check for sudo 2022-12-07 20:22:41 -05:00
hinto-janaiyo
f988e4224c
main: add [zeroize] and implement sudo input/test screen for xmrig 2022-12-07 18:02:08 -05:00
hinto-janaiyo
31f23d9d58
app: check for overflowing user resolution values 2022-12-06 22:01:36 -05:00
hinto-janaiyo
33089ddca3
p2pool/app: add STDIN + clear at 56million bytes, 4:3 default ratio 2022-12-06 21:19:24 -05:00
hinto-janaiyo
9b1a815089
helper: p2pool - fix uptime, format with commas and spaces 2022-12-06 15:17:37 -05:00
hinto-janaiyo
2a9ebd4cdf
helper: p2pool - connect major [Helper] APIs to GUI thread
Lots of stuff in this commit:
1. Implement [Start/Stop/Restart] and make it not possible for
the GUI to interact with that UI if [Helper] is doing stuff.
This prevents the obviously bad situation where [Helper] is in
the middle of spawning P2Pool, but the user is still allowed to
start it again, which would spawn another P2Pool. The main GUI
matches on the state and disables the appropriate UI so the
user can't do this.

2. Sync P2Pool's [Priv] and [Pub] output so that the GUI thread
is only rendering it once a second. All of Gupax also refreshes
at least once a second now as well.

3. Match the [ProcessState] with some colors in the GUI

4. GUI thread no longer directly starts/stops/restarts a process.
It will call a function in [Helper] that acts as a proxy.

5. The tokio [async_spawn_p2pool_watchdog()] function that was
a clone of the PTY version (but had async stuff) and all of the
related functions like the async STDOUT/STDERR reader is now
completely gone. It doesn't make sense to write the same code
twice, both [Simple] and [Advanced] will have a PTY, only
difference being the [Simple] UI won't have an input box.

6. P2Pool's exit code is now examined, either success or failure

7. Output was moved into it's own [Arc<Mutex>]. This allows for
more efficient writing/reading since before I had to lock all of
[Helper], which caused some noticable deadlocks in the GUI.

8. New [tab] field in [State<Gupax>], and GUI option to select
the tab that Gupax will start on.
2022-12-05 22:50:00 -05:00
hinto-janaiyo
1f3a472869
helper: p2pool - stdout payouts/xmr parser, priv -> pub functions 2022-12-05 14:55:50 -05:00
hinto-janaiyo
5d293054cf
helper: p2pool - fix args, basic watchdog loop, add STDOUT/STDERR handle to [Process] struct 2022-12-04 11:24:38 -05:00
hinto-janaiyo
0a8deee359
helper: add functions for p2pool/xmrig UI -> command arguments 2022-12-03 13:41:14 -05:00
hinto-janaiyo
1d8cd88309
helper: create wireframe of the [Helper::helper()] event loop 2022-11-30 22:03:49 -05:00
hinto-janaiyo
212baf93ec
command: implement basic data structures, functions
This adds the basic wireframe of how processes will be handled.
The data/funcs in [command.rs] will be the API the main GUI thread
uses to talk to child processes. The process thread will loop
every 1 second to read/write the necessary data (stdout, stdin),
and handle signals from the GUI thread (kill, restart, etc).
2022-11-28 12:05:09 -05:00
hinto-janaiyo
bd9c543c08
xmrig: reorder "rig" to be last in list 2022-11-26 22:38:18 -05:00
hinto-janaiyo
4d4d2f1a42
main: implement [--reset-pools] 2022-11-24 21:06:29 -05:00
hinto-janaiyo
6af2ffcc16
Cargo update + clippy lint fixes 2022-11-23 23:03:56 -05:00
hinto-janaiyo
c25cbacb46
[Simple/Advanced] for [Gupax/XMRig] tabs 2022-11-23 16:50:15 -05:00
hinto-janaiyo
9e03b3caad
cargo/tor/p2pool: clean deps, warn macos arti, fix node overflow
Cargo: Cleanup unused dependencies, enable some build optimizations

Tor: Arti doesn't seem to work on macOS
Even a bare Arti+Hyper request doesn't seem to work, so it's
probably not something to do with Gupax. A lot of issues only
seem to popup in a VM (OpenGL, TLS) even though on bare metal
Gupax runs fine, so Tor might work fine on real macOS but I don't
have real macOS to test it. VM macOS can't create a circuit, so,
disable by default and add a warning that it's unstable.

P2Pool: Let selected_index start at 0, and only +1 when printing
to the user, this makes the overflow math when adding/deleting a
lot more simple because selected_index will match the actual index
of the node vector
2022-11-21 17:25:38 -05:00
hinto-janaiyo
7a5fe24276
disk: add [ErrorState] handling for disk errors 2022-11-19 22:49:15 -05:00
hinto-janaiyo
2f6bb53027
p2pool: use indexing for nodes instead of for loop comparisons 2022-11-19 13:03:33 -05:00
hinto-janaiyo
adaaca394a
gupax: disable FileSelector ui if thread exists 2022-11-17 16:53:55 -05:00
hinto-janaiyo
1b85e59530
cleanup cargo warnings 2022-11-16 14:40:25 -05:00
hinto-janaiyo
50fff5c311
main: implement [ErrorState] checks in main() 2022-11-16 14:07:27 -05:00
hinto-janaiyo
9faf0fc9f5
p2pool: add [Advanced], add [node.toml] database, add char limit 2022-11-13 21:56:25 -05:00
hinto-janaiyo
9638f9dc5b
p2pool: add [Ping] into GUI, add [simple], add address regex check 2022-11-10 21:20:31 -05:00
hinto-janaiyo
22a03a6034
os: fix platform specific issues 2022-11-02 18:18:41 -04:00
hinto-janaiyo
20f5e2d917
icons: custom icon per OS, build.rs, cargo-bundle 2022-10-31 17:03:59 -04:00
hinto-janaiyo
f83bf5e2cc
egui: fix windows VM OpenGL panics, allow [F11] fullscreen 2022-10-29 21:56:17 -04:00
hinto-janaiyo
52070ae00c
update: move [3] retry to outer loop 2022-10-28 15:45:13 -04:00
hinto-janaiyo
8780b0684d
update/gupax: retry on failed bytes, add progress bar/spinner 2022-10-27 11:52:18 -04:00
hinto-janaiyo
6418a0ad2c
update: implement retry on [v*] failure, version diff to new vec 2022-10-26 23:15:56 -04:00
hinto-janaiyo
bf81b2c57c
update: implement tor/arti, tls, basic metadata fetch 2022-10-24 22:58:42 -04:00
hinto-janaiyo
5e65d07470
state.rs: add State::merge() 2022-10-18 15:26:21 -04:00
hinto-janaiyo
14a5538173
fix threads, gupax tab, inline about tab 2022-10-16 20:36:58 -04:00
hinto-janaiyo
773bc65593
add basic [--flags] 2022-10-16 17:29:24 -04:00
hinto-janaiyo
c93a07b7a5
add [node.rs]: ping community nodes, find fastest 2022-10-14 17:22:25 -04:00
hinto-janaiyo
ab9b98a819
add toml.rs/constants.rs, ask_before_quit screen 2022-10-13 09:17:32 -04:00