This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository evisum.
View the commit online.
commit d1c7c422d3decc76a7a4417919e5f78f483d2593
Author: Alastair Poole <[email protected]>
AuthorDate: Thu May 28 19:45:58 2026 +0100
uptime: Calculate uptime API.
boycott asked for this helper.
---
NEWS | 9 +++++++
VERSION | 2 +-
meson.build | 2 +-
src/bin/engine/evisum_engine.c | 33 ++++++++++++++++++++++++-
src/bin/enigmatic/client/meson.build | 2 +-
src/bin/enigmatic/system/meson.build | 2 ++
src/bin/enigmatic/system/uptime.c | 48 ++++++++++++++++++++++++++++++++++++
src/bin/enigmatic/system/uptime.h | 10 ++++++++
8 files changed, 104 insertions(+), 4 deletions(-)
diff --git a/NEWS b/NEWS
index 5f373b4..f7cdc03 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+=============
+Evisum 2.0.11
+=============
+
+ * Improve efficiency of UI memory usage when not in history mode.
+ * Keep track of disk read and writes.
+ * Fix the history bounds to include up to the current time.
+ * Add a basic uptime API libenigmatic can provide.
+
=============
Evisum 2.0.10
=============
diff --git a/VERSION b/VERSION
index 0a69206..6cbacdc 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.10
+2.0.11
diff --git a/meson.build b/meson.build
index ece69f9..bd54418 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
##### Project
project('evisum', 'c',
- version : '2.0.10',
+ version : '2.0.11',
meson_version : '>= 0.56.0')
efl_version = '>= 1.27.0'
diff --git a/src/bin/engine/evisum_engine.c b/src/bin/engine/evisum_engine.c
index b4ab12b..e2ae643 100644
--- a/src/bin/engine/evisum_engine.c
+++ b/src/bin/engine/evisum_engine.c
@@ -57,6 +57,9 @@ _engine_snapshot_release(void);
static void
_engine_history_logs_free(Eina_List *logs);
+static void
+_engine_history_logs_current_end_update(Eina_List *logs);
+
static Eina_Bool
_engine_pid_alive(pid_t pid)
{
@@ -516,6 +519,7 @@ _engine_history_log_add(Eina_List **logs, char *path, const struct stat *st_in)
log->end_time = end_time;
*logs = eina_list_append(*logs, log);
+ if (!st_in) _engine_history_logs_current_end_update(*logs);
return EINA_TRUE;
}
@@ -596,11 +600,15 @@ _engine_history_logs_get(Eina_Bool refresh, uint32_t since)
copy = _engine_history_logs_clone(_state.history_recent_logs);
}
UNLOCK();
- if (copy) return _engine_history_logs_since_trim(copy, since);
+ if (copy) {
+ _engine_history_logs_current_end_update(copy);
+ return _engine_history_logs_since_trim(copy, since);
+ }
}
logs = _engine_history_logs_scan(since);
if (!logs) return NULL;
+ _engine_history_logs_current_end_update(logs);
if (_state.lock_init) {
copy = _engine_history_logs_clone(logs);
@@ -621,6 +629,29 @@ _engine_history_logs_get(Eina_Bool refresh, uint32_t since)
return logs;
}
+static void
+_engine_history_logs_current_end_update(Eina_List *logs)
+{
+ Eina_List *l;
+ Evisum_Engine_History_Log *log;
+ char *current_path;
+ uint32_t now;
+
+ if (!logs) return;
+
+ current_path = enigmatic_log_path();
+ if (!current_path) return;
+
+ now = (uint32_t) time(NULL);
+ EINA_LIST_FOREACH(logs, l, log) {
+ if (!log || !log->path || strcmp(log->path, current_path)) continue;
+ if (log->end_time < now) log->end_time = now;
+ break;
+ }
+
+ free(current_path);
+}
+
static Eina_Bool
_engine_history_logs_time_available_get(Eina_List *logs, uint32_t history_time)
{
diff --git a/src/bin/enigmatic/client/meson.build b/src/bin/enigmatic/client/meson.build
index 69f1389..2aa119a 100644
--- a/src/bin/enigmatic/client/meson.build
+++ b/src/bin/enigmatic/client/meson.build
@@ -32,7 +32,7 @@ install_headers('../Events.h', subdir : 'enigmatic')
install_headers('../enigmatic_visibility.h', subdir : 'enigmatic')
install_headers('../enigmatic_util.h', subdir : 'enigmatic')
install_headers('Enigmatic_Client.h', subdir : 'enigmatic')
-install_headers('../system/machine.h', '../system/file_systems.h', '../system/process.h', subdir : 'enigmatic/system')
+install_headers('../system/machine.h', '../system/file_systems.h', '../system/process.h', '../system/uptime.h', subdir : 'enigmatic/system')
install_headers('../intl/gettext.h', subdir : 'enigmatic/intl')
pkg = import('pkgconfig')
diff --git a/src/bin/enigmatic/system/meson.build b/src/bin/enigmatic/system/meson.build
index 51a5900..c2a4c74 100644
--- a/src/bin/enigmatic/system/meson.build
+++ b/src/bin/enigmatic/system/meson.build
@@ -3,6 +3,8 @@ src_system = files([
'machine.h',
'file_systems.c',
'file_systems.h',
+ 'uptime.c',
+ 'uptime.h',
])
src_process = files([
diff --git a/src/bin/enigmatic/system/uptime.c b/src/bin/enigmatic/system/uptime.c
new file mode 100644
index 0000000..9b0d888
--- /dev/null
+++ b/src/bin/enigmatic/system/uptime.c
@@ -0,0 +1,48 @@
+#include "uptime.h"
+
+#include <stdio.h>
+
+#if defined(__FreeBSD__) || defined(__DragonFly__) || (defined(__APPLE__) && defined(__MACH__))
+# include <sys/types.h>
+# include <sys/sysctl.h>
+# include <sys/time.h>
+#endif
+
+time_t
+enigmatic_system_uptime_get(void)
+{
+#if defined(__linux__)
+ FILE *f;
+ double uptime = 0.0;
+
+ f = fopen("/proc/uptime", "r");
+ if (!f) return (time_t) -1;
+
+ if (fscanf(f, "%lf", &uptime) != 1)
+ {
+ fclose(f);
+ return (time_t) -1;
+ }
+ fclose(f);
+
+ if (uptime < 0.0) return (time_t) -1;
+
+ return (time_t) uptime;
+#elif defined(__FreeBSD__) || defined(__DragonFly__) || (defined(__APPLE__) && defined(__MACH__))
+ struct timeval boot_time;
+ size_t len = sizeof(boot_time);
+ time_t now;
+ int mib[2] = { CTL_KERN, KERN_BOOTTIME };
+
+ if (sysctl(mib, 2, &boot_time, &len, NULL, 0) == -1)
+ return (time_t) -1;
+
+ now = time(NULL);
+ if ((now == (time_t) -1) || (boot_time.tv_sec > now))
+ return (time_t) -1;
+
+ return now - boot_time.tv_sec;
+#else
+ return (time_t) -1;
+#endif
+}
diff --git a/src/bin/enigmatic/system/uptime.h b/src/bin/enigmatic/system/uptime.h
new file mode 100644
index 0000000..cc69291
--- /dev/null
+++ b/src/bin/enigmatic/system/uptime.h
@@ -0,0 +1,10 @@
+#ifndef UPTIME_H
+#define UPTIME_H
+
+#include <time.h>
+#include "enigmatic_visibility.h"
+
+ENIGMATIC_API time_t
+enigmatic_system_uptime_get(void);
+
+#endif
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.