]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
message.c: Add option to suppress the Message channel AMI and ARI events
authorGeorge Joseph <gjoseph@digium.com>
Mon, 3 Feb 2020 16:24:58 +0000 (09:24 -0700)
committerGeorge Joseph <gjoseph@digium.com>
Mon, 3 Feb 2020 19:57:59 +0000 (12:57 -0700)
In order to reduce the amount of AMI and ARI events generated,
the global "Message/ast_msg_queue" channel can be set to suppress
it's normal channel housekeeping events such as "Newexten",
"VarSet", etc. This can greatly reduce load on the manager
and ARI applications when the Digium Phone Module for Asterisk
is in use.  To enable, set "hide_messaging_ami_events" in
asterisk.conf to "yes"  In Asterisk versions <18, the default
is "no" preserving existing behavior.  Beginning with
Asterisk 18, the option will default to "yes".

NOTE:  This change does not affect UserEvents or the ARI
TextMessageReceived events.

* Added the "hide_messaging_ami_events" option to asterisk.conf.

* Changed message.c to set the AST_CHAN_TP_INTERNAL property on
  the "Message/ast_msg_queue" channel if the option is set in
  asterisk.conf.  This suppresses the reporting of the events.

Change-Id: Ia2e3516d43f4e0df994fc6598565d6bba2d7018b

configs/samples/asterisk.conf.sample
doc/CHANGES-staging/hide_messaging_ami_events [new file with mode: 0644]
include/asterisk/options.h
main/asterisk.c
main/message.c
main/options.c

index 5f33abbfe278bb053c9f56759c351252fc2d2e06..bf0bdba092ff5991ccaffe442a0b74c9a42cfe5e 100644 (file)
@@ -118,6 +118,11 @@ documentation_language = en_US     ; Set the language you want documentation
                                ; calls are not accepted by a remote
                                ; implementation, please report this and go
                                ; back to value 96.
+;hide_messaging_ami_events = no;  This option, if enabled, will
+                ; suppress all of the Message/ast_msg_queue channel's
+                ; housekeeping AMI and ARI channel events.  This can
+                ; reduce the load on the manager and ARI applications
+                ; when the Digium Phone Module for Asterisk is in use.
 
 ; Changing the following lines may compromise your security.
 ;[files]
diff --git a/doc/CHANGES-staging/hide_messaging_ami_events b/doc/CHANGES-staging/hide_messaging_ami_events
new file mode 100644 (file)
index 0000000..0afbeec
--- /dev/null
@@ -0,0 +1,11 @@
+Subject: Messaging
+
+In order to reduce the amount of AMI and ARI events generated,
+the global "Message/ast_msg_queue" channel can be set to suppress
+it's normal channel housekeeping events such as "Newexten",
+"VarSet", etc. This can greatly reduce load on the manager
+and ARI applications when the Digium Phone Module for Asterisk
+is in use.  To enable, set "hide_messaging_ami_events" in
+asterisk.conf to "yes"  In Asterisk versions <18, the default
+is "no" preserving existing behavior.  Beginning with
+Asterisk 18, the option will default to "yes".
index 6c4e5529583e9759de37a2ac5b2e4f36ab48160e..f8c813f19ab2b05a199b59077e3e2c80f081772a 100644 (file)
@@ -84,6 +84,8 @@ enum ast_option_flags {
        AST_OPT_FLAG_DEBUG_MODULE = (1 << 23),
        /*! Terminal colors should be adjusted for a light-colored background */
        AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25),
+       /*! Make the global Message channel an internal channel to suppress AMI events */
+       AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS = (1 << 26),
        /*! Force black background */
        AST_OPT_FLAG_FORCE_BLACK_BACKGROUND = (1 << 27),
        /*! Hide remote console connect messages on console */
@@ -129,6 +131,7 @@ enum ast_option_flags {
 #define ast_opt_generic_plc         ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC)
 #define ast_opt_ref_debug           ast_test_flag(&ast_options, AST_OPT_FLAG_REF_DEBUG)
 #define ast_opt_generic_plc_on_equal_codecs  ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS)
+#define ast_opt_hide_messaging_ami_events  ast_test_flag(&ast_options, AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS)
 
 /*! Maximum log level defined by PJPROJECT. */
 #define MAX_PJ_LOG_MAX_LEVEL           6
index 38084b4f5812819bf184c55964c88fcc78a8ca1f..037c7cdd923ce63e2f610410b519156ecdcd52d5 100644 (file)
@@ -506,6 +506,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
        ast_cli(a->fd, "  Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled");
        ast_cli(a->fd, "  Generic PLC:                 %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled");
        ast_cli(a->fd, "  Generic PLC on equal codecs: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS) ? "Enabled" : "Disabled");
+       ast_cli(a->fd, "  Hide Msg Chan AMI events:    %s\n", ast_opt_hide_messaging_ami_events ? "Enabled" : "Disabled");
        ast_cli(a->fd, "  Min DTMF duration::          %u\n", option_dtmfminduration);
 #if !defined(LOW_MEMORY)
        ast_cli(a->fd, "  Cache media frames:          %s\n", ast_opt_cache_media_frames ? "Enabled" : "Disabled");
index 487416277781fd286152f09d6f36b27e259bb37e..39b8d873e02ac0ffee9666077754567a790f6a6f 100644 (file)
@@ -283,7 +283,7 @@ static int chan_msg_send_digit_end(struct ast_channel *chan, char digit,
  * This will not be registered as we never want anything to try
  * to create Message channels other than internally in this file.
  */
-static const struct ast_channel_tech msg_chan_tech_hack = {
+static struct ast_channel_tech msg_chan_tech_hack = {
        .type             = "Message",
        .description      = "Internal Text Message Processing",
        .read             = chan_msg_read,
@@ -685,6 +685,10 @@ static struct ast_channel *create_msg_q_chan(void)
                return NULL;
        }
 
+       if (ast_opt_hide_messaging_ami_events) {
+               msg_chan_tech_hack.properties |= AST_CHAN_TP_INTERNAL;
+       }
+
        ast_channel_tech_set(chan, &msg_chan_tech_hack);
        ast_channel_unlock(chan);
        ast_channel_unlink(chan);
index 1da787fa29ef4d56a9416049d7e396ce6dd25f51..d6b48db613e9d1c84e74b01095db94b41f0ec4c7 100644 (file)
@@ -464,6 +464,8 @@ void load_asterisk_conf(void)
                        }
                } else if (!strcasecmp(v->name, "live_dangerously")) {
                        live_dangerously = ast_true(v->value);
+               } else if (!strcasecmp(v->name, "hide_messaging_ami_events")) {
+                       ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS);
                }
        }
        if (!ast_opt_remote) {