mirror of
https://github.com/mimblewimble/grin.git
synced 2025-02-08 04:11:08 +03:00
Enhance login and submit logging (#1055)
* Enhance login handler to support parameters. Also report worker login string when reporting found blocks * report worker id if no login
This commit is contained in:
parent
dd861c8d8c
commit
982fdea636
1 changed files with 23 additions and 14 deletions
|
@ -149,6 +149,7 @@ fn accept_workers(
|
||||||
|
|
||||||
pub struct Worker {
|
pub struct Worker {
|
||||||
id: String,
|
id: String,
|
||||||
|
login: Option<String>,
|
||||||
stream: BufStream<TcpStream>,
|
stream: BufStream<TcpStream>,
|
||||||
error: bool,
|
error: bool,
|
||||||
authenticated: bool,
|
authenticated: bool,
|
||||||
|
@ -159,6 +160,7 @@ impl Worker {
|
||||||
pub fn new(id: String, stream: BufStream<TcpStream>) -> Worker {
|
pub fn new(id: String, stream: BufStream<TcpStream>) -> Worker {
|
||||||
Worker {
|
Worker {
|
||||||
id: id,
|
id: id,
|
||||||
|
login: None,
|
||||||
stream: stream,
|
stream: stream,
|
||||||
error: false,
|
error: false,
|
||||||
authenticated: false,
|
authenticated: false,
|
||||||
|
@ -299,15 +301,12 @@ impl StratumServer {
|
||||||
// Call the handler function for requested method
|
// Call the handler function for requested method
|
||||||
let (response, err) = match request.method.as_str() {
|
let (response, err) = match request.method.as_str() {
|
||||||
"login" => {
|
"login" => {
|
||||||
let (response, err) = self.handle_login(request.params);
|
let (response, err) = self.handle_login(request.params, &mut workers_l[num]);
|
||||||
// XXX TODO Future? - Validate username and password
|
|
||||||
if err == false {
|
|
||||||
workers_l[num].authenticated = true;
|
|
||||||
}
|
|
||||||
(response, err)
|
(response, err)
|
||||||
}
|
}
|
||||||
"submit" => self.handle_submit(
|
"submit" => self.handle_submit(
|
||||||
request.params,
|
request.params,
|
||||||
|
&mut workers_l[num],
|
||||||
&mut stratum_stats.worker_stats[worker_stats_id],
|
&mut stratum_stats.worker_stats[worker_stats_id],
|
||||||
),
|
),
|
||||||
"keepalive" => self.handle_keepalive(),
|
"keepalive" => self.handle_keepalive(),
|
||||||
|
@ -392,19 +391,22 @@ impl StratumServer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle LOGIN message
|
// Handle LOGIN message
|
||||||
fn handle_login(&self, params: Option<String>) -> (String, bool) {
|
fn handle_login(&self, params: Option<String>, worker: &mut Worker) -> (String, bool) {
|
||||||
// Extract the params string into a LoginParams struct
|
// Extract the params string into a LoginParams struct
|
||||||
let params_str = match params {
|
let params_str = match params {
|
||||||
Some(val) => val,
|
Some(val) => val,
|
||||||
None => String::from("{}"),
|
None => String::from("{}"),
|
||||||
};
|
};
|
||||||
let _login_params: LoginParams = match serde_json::from_str(¶ms_str) {
|
let login_params: LoginParams = match serde_json::from_str(¶ms_str) {
|
||||||
Ok(val) => val,
|
Ok(val) => val,
|
||||||
Err(_e) => {
|
Err(_e) => {
|
||||||
let r = r#"{"code": -32600, "message": "Invalid Request"}"#;
|
let r = r#"{"code": -32600, "message": "Invalid Request"}"#;
|
||||||
return (String::from(r), true);
|
return (String::from(r), true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
worker.login = Some(login_params.login);
|
||||||
|
// XXX TODO Future? - Validate login and password
|
||||||
|
worker.authenticated = true;
|
||||||
return (String::from("ok"), false);
|
return (String::from("ok"), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,6 +416,7 @@ impl StratumServer {
|
||||||
fn handle_submit(
|
fn handle_submit(
|
||||||
&self,
|
&self,
|
||||||
params: Option<String>,
|
params: Option<String>,
|
||||||
|
worker: &mut Worker,
|
||||||
worker_stats: &mut WorkerStats,
|
worker_stats: &mut WorkerStats,
|
||||||
) -> (String, bool) {
|
) -> (String, bool) {
|
||||||
// Extract the params string into a SubmitParams struct
|
// Extract the params string into a SubmitParams struct
|
||||||
|
@ -436,13 +439,6 @@ impl StratumServer {
|
||||||
b.header.nonce = submit_params.nonce;
|
b.header.nonce = submit_params.nonce;
|
||||||
b.header.pow.proof_size = submit_params.pow.len();
|
b.header.pow.proof_size = submit_params.pow.len();
|
||||||
b.header.pow.nonces = submit_params.pow;
|
b.header.pow.nonces = submit_params.pow;
|
||||||
info!(
|
|
||||||
LOGGER,
|
|
||||||
"(Server ID: {}) Found proof of work, adding block {}",
|
|
||||||
self.id,
|
|
||||||
b.hash()
|
|
||||||
);
|
|
||||||
// Submit the block to grin server (known here as "self.miner")
|
|
||||||
let res = self.chain.process_block(b.clone(), chain::Options::MINE);
|
let res = self.chain.process_block(b.clone(), chain::Options::MINE);
|
||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
error!(
|
error!(
|
||||||
|
@ -466,6 +462,19 @@ impl StratumServer {
|
||||||
let err = e.to_string();
|
let err = e.to_string();
|
||||||
return (err, true);
|
return (err, true);
|
||||||
}
|
}
|
||||||
|
let submitted_by = match worker.login.clone() {
|
||||||
|
None => worker.id.to_string(),
|
||||||
|
Some(login) => login.clone()
|
||||||
|
};
|
||||||
|
info!(
|
||||||
|
LOGGER,
|
||||||
|
"(Server ID: {}) Found POW for block with hash {} at height {} using nonce {} submitted by worker {}",
|
||||||
|
self.id,
|
||||||
|
b.hash(),
|
||||||
|
b.header.height,
|
||||||
|
b.header.nonce,
|
||||||
|
submitted_by,
|
||||||
|
);
|
||||||
worker_stats.num_accepted += 1;
|
worker_stats.num_accepted += 1;
|
||||||
return (String::from("ok"), false);
|
return (String::from("ok"), false);
|
||||||
} // handle submit a solution
|
} // handle submit a solution
|
||||||
|
|
Loading…
Reference in a new issue