From 53c032f9f6ca5e618f7daae46af0e8cd508b01cf Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Fri, 21 Feb 2020 13:30:37 +0100 Subject: [PATCH] Add expected start/end time columns --- include/ThreadPool.h | 2 +- include/ThreadedActivity.h | 2 +- include/ThreadedActivityStats.h | 9 ++-- ...et_internals_periodic_activities_stats.lua | 45 ++++++++++++++++++- scripts/lua/modules/internals_utils.lua | 31 +++++++++++-- src/ThreadPool.cpp | 11 +++-- src/ThreadedActivity.cpp | 12 +++-- src/ThreadedActivityStats.cpp | 5 ++- 8 files changed, 99 insertions(+), 18 deletions(-) diff --git a/include/ThreadPool.h b/include/ThreadPool.h index d3fecd71c5..27ca41c928 100644 --- a/include/ThreadPool.h +++ b/include/ThreadPool.h @@ -59,7 +59,7 @@ class ThreadPool { inline bool isTerminating() { return terminating; }; void run(); - bool queueJob(ThreadedActivity *ta, char *path, NetworkInterface *iface, time_t deadline); + bool queueJob(ThreadedActivity *ta, char *path, NetworkInterface *iface, time_t scheduled_time, time_t deadline); }; diff --git a/include/ThreadedActivity.h b/include/ThreadedActivity.h index 02420b5c96..ebbd93d45f 100644 --- a/include/ThreadedActivity.h +++ b/include/ThreadedActivity.h @@ -52,7 +52,7 @@ class ThreadedActivity { void periodicActivityBody(); void aperiodicActivityBody(); void uSecDiffPeriodicActivityBody(); - void schedulePeriodicActivity(ThreadPool *pool, time_t deadline); + void schedulePeriodicActivity(ThreadPool *pool, time_t scheduled_time, time_t deadline); ThreadedActivityState *getThreadedActivityState(NetworkInterface *iface) const; void updateThreadedActivityStatsBegin(NetworkInterface *iface, struct timeval *begin); void updateThreadedActivityStatsEnd(NetworkInterface *iface, u_long latest_duration); diff --git a/include/ThreadedActivityStats.h b/include/ThreadedActivityStats.h index 18adef76ff..b9455066d3 100644 --- a/include/ThreadedActivityStats.h +++ b/include/ThreadedActivityStats.h @@ -43,10 +43,11 @@ class ThreadedActivityStats { threaded_activity_stats_t *ta_stats, *ta_stats_shadow; time_t last_start_time, in_progress_since, last_queued_time; const ThreadedActivity *threaded_activity; - u_long max_duration_ms, last_duration_ms; u_long num_not_executed, num_is_slow; - bool not_executed, is_slow; + u_long max_duration_ms, last_duration_ms; + time_t scheduled_time, deadline; static ticks tickspersec; + bool not_executed, is_slow; void updateRRDStats(bool write, ticks cur_ticks); void luaRRDStats(lua_State *vm, bool write, threaded_activity_stats_t *cur_stats); @@ -69,7 +70,9 @@ class ThreadedActivityStats { void setNotExecutedAttivity() { not_executed = true; num_not_executed++; } void setSlowPeriodicActivity() { is_slow = true; num_is_slow++; } - inline void clearErrors() { not_executed = false; is_slow = false; } + inline void setScheduledTime(time_t t) { scheduled_time = t; } + inline void setDeadline(time_t t) { deadline = t; } + inline void clearErrors() { not_executed = false; is_slow = false; } void resetStats(); diff --git a/scripts/lua/get_internals_periodic_activities_stats.lua b/scripts/lua/get_internals_periodic_activities_stats.lua index 099c07fd6f..4b7d3687c1 100644 --- a/scripts/lua/get_internals_periodic_activities_stats.lua +++ b/scripts/lua/get_internals_periodic_activities_stats.lua @@ -153,6 +153,7 @@ end local res = {} local i = 0 +local now = os.time() for key in pairsByValues(sort_to_key, sOrder) do if i >= to_skip + perPage then @@ -165,6 +166,7 @@ for key in pairsByValues(sort_to_key, sOrder) do local max_duration = script_stats.stats.duration.max_duration_ms local last_duration = script_stats.stats.duration.last_duration_ms + local status = script_stats.stats.state local warn = "" if(script_stats.stats["not_excecuted"]) then @@ -179,6 +181,47 @@ for key in pairsByValues(sort_to_key, sOrder) do record["column_ifid"] = string.format("%i", script_stats.ifid) record["column_time_perc"] = script_stats.stats.perc_duration + if status ~= "running" then + -- If sleeping/queued, when it should be run + local exp_start + + if(status == "queued") then + exp_start = script_stats.stats.scheduled_time + + if(exp_start > now) then + exp_start = format_utils.formatPastEpochShort(exp_start) + else + exp_start = "" .. i18n("internals.last_start_time_ago", {time = format_utils.secondsToTime(now - exp_start)}) .. "" + end + else --elseif(status == "sleeping") then + exp_start = script_stats.stats.deadline + + if(exp_start < now) then + exp_start = "" .. i18n("internals.last_start_time_ago", {time = format_utils.secondsToTime(now - exp_start)}) .. "" + else + exp_start = format_utils.formatPastEpochShort(exp_start) + end + end + + record["column_expected_start_time"] = exp_start + record["column_expected_end_time"] = " " + else + -- If running, when it should stop + local deadline = script_stats.stats.deadline + + if(deadline > now) then + deadline = format_utils.formatPastEpochShort(deadline) + else + deadline = "" .. i18n("internals.last_start_time_ago", {time = format_utils.secondsToTime(now - deadline)}) .. "" + end + + record["column_expected_start_time"] = " " + record["column_expected_end_time"] = deadline + end + + -- TODO + record["column_work_completion"] = "90%" + if script_stats.stats["last_start_time"] and script_stats.stats["last_start_time"] > 0 then record["column_last_start_time"] = i18n("internals.last_start_time_ago", {time = format_utils.secondsToTime(now - script_stats.stats["last_start_time"])}) -- tprint({orig = script_stats.stats[k], k = k, v = record["column_"..k]}) @@ -190,7 +233,7 @@ for key in pairsByValues(sort_to_key, sOrder) do record["column_time_perc"] = internals_utils.getPeriodicActivitiesFillBar(utiliz["busy"], utiliz["available"]) record["column_last_duration"] = last_duration - record["column_status"] = status2label(script_stats.stats.state) + record["column_status"] = status2label(status) record["column_name"] = string.format('%s', script_stats.ifid, getHumanReadableInterfaceName(getInterfaceName(script_stats.ifid))) diff --git a/scripts/lua/modules/internals_utils.lua b/scripts/lua/modules/internals_utils.lua index 1cb594e3cb..f4203e03a6 100644 --- a/scripts/lua/modules/internals_utils.lua +++ b/scripts/lua/modules/internals_utils.lua @@ -178,9 +178,9 @@ local function printPeriodicActivitiesTable(base_url, ifid, ts_creation)