summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorNiklas Larsson <niklas@tese.se>2016-05-25 15:45:08 +0200
committerNiklas Larsson <niklas@tese.se>2016-06-02 14:14:20 +0200
commit8a5c2e736cd7c9bb3c9806c54c9d0c12d23a5a05 (patch)
treec5fd92c923ff579012b72c677dba353c3ee87c54 /main
parentb0e4ea96de42f0b36845a432937d3c7f6218dd76 (diff)
core/manager: Add uptime field to FullyBooted
Add Uptime and LastReload to event FullyBooted. ASTERISK-26058 #close Reported by: Niklas Larsson Change-Id: I909b330801c0990d78df9b272ab0adc95aecb15e
Diffstat (limited to 'main')
-rw-r--r--main/asterisk.c30
-rw-r--r--main/manager.c18
2 files changed, 44 insertions, 4 deletions
diff --git a/main/asterisk.c b/main/asterisk.c
index 6cfbc1b33..25c6c9569 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -260,6 +260,12 @@ int daemon(int, int); /* defined in libresolv of all places */
<parameter name="Status">
<para>Informational message</para>
</parameter>
+ <parameter name="Uptime">
+ <para>Seconds since start</para>
+ </parameter>
+ <parameter name="LastReload">
+ <para>Seconds since last reload</para>
+ </parameter>
</syntax>
</managerEventInstance>
</managerEvent>
@@ -1020,9 +1026,25 @@ static char *handle_clear_profile(struct ast_cli_entry *e, int cmd, struct ast_c
static void publish_fully_booted(void)
{
RAII_VAR(struct ast_json *, json_object, NULL, ast_json_unref);
+ int uptime = 0;
+ int lastreloaded = 0;
+ struct timeval tmp;
+ struct timeval curtime = ast_tvnow();
- json_object = ast_json_pack("{s: s}",
- "Status", "Fully Booted");
+ if (ast_startuptime.tv_sec) {
+ tmp = ast_tvsub(curtime, ast_startuptime);
+ uptime = (int) tmp.tv_sec;
+ }
+
+ if (ast_lastreloadtime.tv_sec) {
+ tmp = ast_tvsub(curtime, ast_lastreloadtime);
+ lastreloaded = (int) tmp.tv_sec;
+ }
+
+ json_object = ast_json_pack("{s: s, s: i, s: i}",
+ "Status", "Fully Booted",
+ "Uptime", uptime,
+ "LastReload", lastreloaded);
ast_manager_publish_event("FullyBooted", EVENT_FLAG_SYSTEM, json_object);
}
@@ -4221,6 +4243,9 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
char *buf;
int moduleresult; /*!< Result from the module load subsystem */
+ /* Set time as soon as possible */
+ ast_lastreloadtime = ast_startuptime = ast_tvnow();
+
/* This needs to remain as high up in the initial start up as possible.
* daemon causes a fork to occur, which has all sorts of unintended
* consequences for things that interact with threads. This call *must*
@@ -4689,7 +4714,6 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
__ast_mm_init_phase_2();
#endif /* defined(__AST_DEBUG_MALLOC) */
- ast_lastreloadtime = ast_startuptime = ast_tvnow();
ast_cli_register_multiple(cli_asterisk_shutdown, ARRAY_LEN(cli_asterisk_shutdown));
ast_cli_register_multiple(cli_asterisk, ARRAY_LEN(cli_asterisk));
ast_register_cleanup(main_atexit);
diff --git a/main/manager.c b/main/manager.c
index d2fdc403d..94415b7a0 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -4157,10 +4157,26 @@ static int action_login(struct mansession *s, const struct message *m)
&& ast_test_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED)) {
struct ast_str *auth = ast_str_alloca(MAX_AUTH_PERM_STRING);
const char *cat_str = authority_to_str(EVENT_FLAG_SYSTEM, &auth);
+ long uptime = 0;
+ long lastreloaded = 0;
+ struct timeval tmp;
+ struct timeval curtime = ast_tvnow();
+
+ if (ast_startuptime.tv_sec) {
+ tmp = ast_tvsub(curtime, ast_startuptime);
+ uptime = tmp.tv_sec;
+ }
+
+ if (ast_lastreloadtime.tv_sec) {
+ tmp = ast_tvsub(curtime, ast_lastreloadtime);
+ lastreloaded = tmp.tv_sec;
+ }
astman_append(s, "Event: FullyBooted\r\n"
"Privilege: %s\r\n"
- "Status: Fully Booted\r\n\r\n", cat_str);
+ "Uptime: %ld\r\n"
+ "LastReload: %ld\r\n"
+ "Status: Fully Booted\r\n\r\n", cat_str, uptime, lastreloaded);
}
return 0;
}