Fix tunnel start_time assignment and improve status display formatting

- Add missing start_time assignment in wsssht tunnel creation
- Update uptime display to show days-hours:minutes:seconds format
- Improve last rate calculation in wssshc status display to use actual time intervals
parent 7c8a9654
...@@ -1497,14 +1497,20 @@ void *status_thread(void *arg) { ...@@ -1497,14 +1497,20 @@ void *status_thread(void *arg) {
if (!state->debug) { if (!state->debug) {
time_t current_time = time(NULL); time_t current_time = time(NULL);
time_t uptime = current_time - state->start_time; time_t uptime = current_time - state->start_time;
int hours = uptime / 3600; int days = uptime / 86400;
int hours = (uptime % 86400) / 3600;
int minutes = (uptime % 3600) / 60; int minutes = (uptime % 3600) / 60;
int seconds = uptime % 60; int seconds = uptime % 60;
pthread_mutex_lock(&state->tunnel_mutex); pthread_mutex_lock(&state->tunnel_mutex);
int tunnel_count = state->tunnels_count; int tunnel_count = state->tunnels_count;
log_message("STATUS", "Uptime: %02d:%02d:%02d | Active tunnels: %d\n", if (days > 0) {
hours, minutes, seconds, tunnel_count); log_message("STATUS", "Uptime: %d-%02d:%02d:%02d | Active tunnels: %d\n",
days, hours, minutes, seconds, tunnel_count);
} else {
log_message("STATUS", "Uptime: %02d:%02d:%02d | Active tunnels: %d\n",
hours, minutes, seconds, tunnel_count);
}
// List active tunnels with details // List active tunnels with details
for (size_t i = 0; i < state->tunnels_count; i++) { for (size_t i = 0; i < state->tunnels_count; i++) {
......
...@@ -95,7 +95,8 @@ void print_status() { ...@@ -95,7 +95,8 @@ void print_status() {
time_t current_time = time(NULL); time_t current_time = time(NULL);
time_t uptime = current_time - start_time; time_t uptime = current_time - start_time;
int hours = uptime / 3600; int days = uptime / 86400;
int hours = (uptime % 86400) / 3600;
int minutes = (uptime % 3600) / 60; int minutes = (uptime % 3600) / 60;
int seconds = uptime % 60; int seconds = uptime % 60;
...@@ -103,8 +104,21 @@ void print_status() { ...@@ -103,8 +104,21 @@ void print_status() {
pthread_mutex_lock(&tunnel_mutex); pthread_mutex_lock(&tunnel_mutex);
int tunnel_count = active_tunnels_count; int tunnel_count = active_tunnels_count;
log_message("STATUS", "Uptime: %02d:%02d:%02d | Active tunnels: %d\n", static time_t last_status_time = 0;
hours, minutes, seconds, tunnel_count);
if (last_status_time == 0) {
last_status_time = current_time;
}
time_t time_since_last_status = current_time - last_status_time;
if (days > 0) {
log_message("STATUS", "Uptime: %d-%02d:%02d:%02d | Active tunnels: %d\n",
days, hours, minutes, seconds, tunnel_count);
} else {
log_message("STATUS", "Uptime: %02d:%02d:%02d | Active tunnels: %d\n",
hours, minutes, seconds, tunnel_count);
}
// List active tunnels with details // List active tunnels with details
for (int i = 0; i < active_tunnels_count; i++) { for (int i = 0; i < active_tunnels_count; i++) {
...@@ -113,7 +127,12 @@ void print_status() { ...@@ -113,7 +127,12 @@ void print_status() {
time_t tunnel_uptime = current_time - tunnel->start_time; time_t tunnel_uptime = current_time - tunnel->start_time;
unsigned long long total_data = tunnel->total_bytes_sent + tunnel->total_bytes_received; unsigned long long total_data = tunnel->total_bytes_sent + tunnel->total_bytes_received;
double avg_rate = tunnel_uptime > 0 ? (double)total_data / tunnel_uptime : 0.0; double avg_rate = tunnel_uptime > 0 ? (double)total_data / tunnel_uptime : 0.0;
double last_rate = tunnel->bytes_last_period / 30.0;
// Calculate last rate based on data since last status
static unsigned long long last_total_data[100] = {0}; // Simple array to track last data
unsigned long long data_since_last = total_data - last_total_data[i];
double last_rate = time_since_last_status > 0 ? (double)data_since_last / time_since_last_status : 0.0;
last_total_data[i] = total_data;
char total_data_str[32], sent_data_str[32], recv_data_str[32], avg_rate_str[32], last_rate_str[32]; char total_data_str[32], sent_data_str[32], recv_data_str[32], avg_rate_str[32], last_rate_str[32];
format_bytes(total_data, total_data_str, sizeof(total_data_str)); format_bytes(total_data, total_data_str, sizeof(total_data_str));
...@@ -122,19 +141,34 @@ void print_status() { ...@@ -122,19 +141,34 @@ void print_status() {
format_bytes((unsigned long long)avg_rate, avg_rate_str, sizeof(avg_rate_str)); format_bytes((unsigned long long)avg_rate, avg_rate_str, sizeof(avg_rate_str));
format_bytes((unsigned long long)last_rate, last_rate_str, sizeof(last_rate_str)); format_bytes((unsigned long long)last_rate, last_rate_str, sizeof(last_rate_str));
log_message("STATUS", " Tunnel ID: %s | Client: %s | Service: %s | Uptime: %ld s | Data: %s (%s sent, %s recv) | Rate: %s/s avg, %s/s last\n", if (days > 0) {
tunnel->request_id, log_message("STATUS", " Tunnel ID: %s | Client: %s | Service: %s | Uptime: %d-%02d:%02d:%02d | Data: %s (%s sent, %s recv) | Rate: %s/s avg, %s/s last\n",
strlen(tunnel->client_id) > 0 ? tunnel->client_id : "local", tunnel->request_id,
strlen(tunnel->service) > 0 ? tunnel->service : "ssh", strlen(tunnel->client_id) > 0 ? tunnel->client_id : "local",
tunnel_uptime, strlen(tunnel->service) > 0 ? tunnel->service : "ssh",
total_data_str, days, hours, minutes, seconds,
sent_data_str, total_data_str,
recv_data_str, sent_data_str,
avg_rate_str, recv_data_str,
last_rate_str); avg_rate_str,
last_rate_str);
} else {
log_message("STATUS", " Tunnel ID: %s | Client: %s | Service: %s | Uptime: %02d:%02d:%02d | Data: %s (%s sent, %s recv) | Rate: %s/s avg, %s/s last\n",
tunnel->request_id,
strlen(tunnel->client_id) > 0 ? tunnel->client_id : "local",
strlen(tunnel->service) > 0 ? tunnel->service : "ssh",
hours, minutes, seconds,
total_data_str,
sent_data_str,
recv_data_str,
avg_rate_str,
last_rate_str);
}
} }
} }
last_status_time = current_time;
pthread_mutex_unlock(&tunnel_mutex); pthread_mutex_unlock(&tunnel_mutex);
} }
......
...@@ -501,6 +501,7 @@ int main(int argc, char *argv[]) { ...@@ -501,6 +501,7 @@ int main(int argc, char *argv[]) {
new_tunnel->server_version_sent = 0; new_tunnel->server_version_sent = 0;
new_tunnel->bin = (config.encoding == ENCODING_BINARY); new_tunnel->bin = (config.encoding == ENCODING_BINARY);
new_tunnel->encoding = config.encoding; new_tunnel->encoding = config.encoding;
new_tunnel->start_time = time(NULL);
new_tunnel->retransmission_buffer = retransmission_buffer_init(); new_tunnel->retransmission_buffer = retransmission_buffer_init();
if (!new_tunnel->retransmission_buffer) { if (!new_tunnel->retransmission_buffer) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment