closes#1
Implements a background watchdog task that:
1. calls neptune-core /network rpc every N seconds (default: 10)
2. emits log message on any state change
3. sends detailed email alert to admin on any state change
Changes:
* AppState now has internal Arc<RwLock<AppStateInner>> to permit
watchdog task to mutate the rpc_client field.
* adjust application to AppState changes (use locks)
* not_found functions no longer accept state arg
* move state initialization into AppState::init()
* add optional alert parameters: admin-email, smtp-*
* add neptune_rpc module with watchdog task
* add alert_email module
* simplify main()
* log warnings if alert parameters not set
* add chrono dep
* add lettre dep
Previously the logo looked very jagged against a dark background.
This makes it look smooth for dark theme. However it is a bit blurry
against white background.
Hopefully can replace with a higher quality graphic soon.
implements a generic solution to redirect query strings generated by
forms to path based URIs that can be handled by existing routes.
This eliminates the need for javascript that was doing the equivalent
client-side.
Changes:
+ present not-found page for unhandled uri paths, eg /stuff
+ display the tip-height on front page
+ add favicon and neptune logo to front page
+ use ServerDir instead of ServeFile for /image and /css
+ add help tooltips for fields on front page
+ use monospace font for digests
Changes:
1. integrates pico minimal responsive css framework for light/dark
themes and overall better looks.
2. adds a not-found page for bad url queries.
3. catches axum/serde deserialization errors of user input and routes
them to the not-found page with a helpful hint (parse error msg)