|
18 | 18 |
|
19 | 19 | extern crate backtrace; |
20 | 20 | extern crate codechain_logger as clogger; |
| 21 | +extern crate get_if_addrs; |
| 22 | +extern crate my_internet_ip; |
21 | 23 |
|
22 | 24 | use backtrace::Backtrace; |
23 | 25 | use clogger::EmailAlarm; |
@@ -48,8 +50,10 @@ fn panic_hook(info: &PanicInfo) { |
48 | 50 | fn panic_hook_with_email_alarm(email_alarm: &EmailAlarm, info: &PanicInfo) { |
49 | 51 | let message = panic_message(info); |
50 | 52 | eprintln!("{}", message); |
| 53 | + let ip_addresses = get_ip_addresses(); |
| 54 | + |
51 | 55 | let message_for_email = message.replace("\n", "<br>"); |
52 | | - email_alarm.send(&message_for_email); |
| 56 | + email_alarm.send(&format!("IP: {}<br>{}", ip_addresses, message_for_email)); |
53 | 57 | exit_on_debug_mode(); |
54 | 58 | } |
55 | 59 |
|
@@ -91,3 +95,24 @@ fn exit_on_debug_mode() { |
91 | 95 |
|
92 | 96 | #[cfg(not(debug_assertions))] |
93 | 97 | fn exit_on_debug_mode() {} |
| 98 | + |
| 99 | +fn get_ip_addresses() -> String { |
| 100 | + match my_internet_ip::get() { |
| 101 | + Ok(ip) => return ip.to_string(), |
| 102 | + Err(e) => { |
| 103 | + eprintln!("Failed get internet IP: {:?}", e); |
| 104 | + } |
| 105 | + }; |
| 106 | + |
| 107 | + match get_if_addrs::get_if_addrs() { |
| 108 | + Ok(interfaces) => { |
| 109 | + let ip_addresses: Vec<String> = |
| 110 | + interfaces.iter().map(|interface| format!("{:?}", interface.ip())).collect(); |
| 111 | + return ip_addresses.join(", ") |
| 112 | + } |
| 113 | + Err(err) => { |
| 114 | + eprintln!("Failed to get local IPs: {}", err); |
| 115 | + } |
| 116 | + } |
| 117 | + "Unknown".to_string() |
| 118 | +} |
0 commit comments