Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/datum_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,26 @@ void datum_api_var_STRATUM_TOTAL_SUBSCRIPTIONS(char *buffer, size_t buffer_size,
void datum_api_var_STRATUM_HASHRATE_ESTIMATE(char *buffer, size_t buffer_size, const T_DATUM_API_DASH_VARS *vardata) {
snprintf(buffer, buffer_size, "%.2f Th/sec", vardata->STRATUM_HASHRATE_ESTIMATE);
}
void datum_api_var_DATUM_PROCESS_UPTIME(char *buffer, size_t buffer_size, const T_DATUM_API_DASH_VARS *vardata) {
uint64_t uptime_seconds = get_process_uptime_seconds();
uint64_t days = uptime_seconds / (24 * 3600);
unsigned int hours = (uptime_seconds % (24 * 3600)) / 3600;
unsigned int minutes = (uptime_seconds % 3600) / 60;
unsigned int seconds = uptime_seconds % 60;

if (days > 0) {
snprintf(buffer, buffer_size, "%"PRIu64" days, %u hours, %u minutes, %u seconds",
days, hours, minutes, seconds);
} else if (hours > 0) {
snprintf(buffer, buffer_size, "%u hours, %u minutes, %u seconds",
hours, minutes, seconds);
} else if (minutes > 0) {
snprintf(buffer, buffer_size, "%u minutes, %u seconds",
minutes, seconds);
} else {
snprintf(buffer, buffer_size, "%u seconds", seconds);
}
}
void datum_api_var_STRATUM_JOB_INFO(char *buffer, size_t buffer_size, const T_DATUM_API_DASH_VARS *vardata) {
if (!vardata->sjob) return;
snprintf(buffer, buffer_size, "%s (%d) @ %.3f", vardata->sjob->job_id, vardata->sjob->global_index, (double)vardata->sjob->tsms / 1000.0);
Expand Down Expand Up @@ -196,6 +216,7 @@ DATUM_API_VarEntry var_entries[] = {
{"DATUM_MINER_TAG", datum_api_var_DATUM_MINER_TAG},
{"DATUM_POOL_DIFF", datum_api_var_DATUM_POOL_DIFF},
{"DATUM_POOL_PUBKEY", datum_api_var_DATUM_POOL_PUBKEY},
{"DATUM_PROCESS_UPTIME", datum_api_var_DATUM_PROCESS_UPTIME},

{"STRATUM_ACTIVE_THREADS", datum_api_var_STRATUM_ACTIVE_THREADS},
{"STRATUM_TOTAL_CONNECTIONS", datum_api_var_STRATUM_TOTAL_CONNECTIONS},
Expand Down
14 changes: 14 additions & 0 deletions src/datum_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
#include "datum_logger.h"

volatile int panic_mode = 0;
static uint64_t process_start_time = 0;

void get_target_from_diff(unsigned char *result, uint64_t diff) {
uint64_t dividend_parts[4] = {0, 0, 0, 0x00000000FFFF0000};
Expand All @@ -76,8 +77,15 @@ void get_target_from_diff(unsigned char *result, uint64_t diff) {
}
}

uint64_t get_process_uptime_seconds() {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (uint64_t)ts.tv_sec - process_start_time;
}

void datum_utils_init(void) {
build_hex_lookup();
process_start_time = monotonic_time_seconds();
}

#ifdef __GNUC__
Expand Down Expand Up @@ -119,6 +127,12 @@ unsigned char floorPoT(uint64_t x) {
}
#endif

uint64_t monotonic_time_seconds(void) {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); // SAFE from system time changes (e.g., NTP adjustments, manual clock changes)
return (uint64_t)ts.tv_sec;
}

uint64_t current_time_millis(void) {
struct timeval te;
gettimeofday(&te, NULL); // get current time
Expand Down
2 changes: 2 additions & 0 deletions src/datum_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,10 @@
#include "datum_logger.h"

void datum_utils_init(void);
uint64_t monotonic_time_seconds(void);
uint64_t current_time_millis(void);
uint64_t current_time_micros(void);
uint64_t get_process_uptime_seconds(void);
unsigned char hex2bin_uchar(const char *in);
void build_hex_lookup(void);
bool my_sha256(void *digest, const void *buffer, size_t length);
Expand Down
4 changes: 4 additions & 0 deletions www/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ <h2>Decentralized Client Stats</h2>
<td class="label">Pool Pubkey:</td>
<td class="fixed-width">${DATUM_POOL_PUBKEY}</td>
</tr>
<tr>
<td class="label">Process uptime:</td>
<td>${DATUM_PROCESS_UPTIME}</td>
</tr>
</table>
</div>

Expand Down