mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	manager: Enhance event filtering for performance
UserNote: You can now perform more granular filtering on events in manager.conf using expressions like `eventfilter(name(Newchannel),header(Channel),method(starts_with)) = PJSIP/` This is much more efficient than `eventfilter = Event: Newchannel.*Channel: PJSIP/` Full syntax guide is in configs/samples/manager.conf.sample.
This commit is contained in:
		
							
								
								
									
										1010
									
								
								main/manager.c
									
									
									
									
									
								
							
							
						
						
									
										1010
									
								
								main/manager.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1320,64 +1320,124 @@ | ||||
| 					</enum> | ||||
| 				</enumlist> | ||||
| 			</parameter> | ||||
| 			<parameter name="FilterType"> | ||||
| 				<para>FilterType can be one of the following:</para> | ||||
| 			<parameter name="MatchCriteria"> | ||||
| 				<para> | ||||
| 				Advanced match criteria.  If not specified, the <literal>Filter</literal> | ||||
| 				parameter is assumed to be a regular expression and will be matched against | ||||
| 				the entire event payload. | ||||
| 				</para> | ||||
| 				<para> | ||||
| 				Syntax: [name(<event_name>)][,header(<header_name>)][,<match_method>] | ||||
| 				</para> | ||||
| 				<para> | ||||
| 				One of each of the following may be specified separated by commas. | ||||
| 				</para> | ||||
| 				<para> | ||||
| 				</para> | ||||
| 				<enumlist> | ||||
| 					<enum name="regex"> | ||||
| 						<para>The Filter parameter contains a regular expression | ||||
| 						which will be applied to the contents of the MatchAgainst | ||||
| 						parameter.</para> | ||||
| 					<enum name="action(include|exclude)"> | ||||
| 						<para> | ||||
| 						Instead of prefixing the Filter with <literal>!</literal> to exclude matching events, | ||||
| 						specify <literal>action(exclude)</literal>.  Although the default is <literal>include</literal> | ||||
| 						if <literal>action</literal> isn't specified, adding <literal>action(include)</literal> | ||||
| 						will help with readability. | ||||
| 						</para> | ||||
| 						<para> | ||||
| 						</para> | ||||
| 					</enum> | ||||
| 					<enum name="exact"> | ||||
| 						<para>The Filter parameter contains a string | ||||
| 						which will be exactly matched to the contents of the MatchAgainst | ||||
| 						parameter.</para> | ||||
| 					<enum name="name(<event_name>)"> | ||||
| 						<para> | ||||
| 						Only events with name <replaceable>event_name</replaceable> will be included. | ||||
| 						</para> | ||||
| 						<para> | ||||
| 						</para> | ||||
| 					</enum> | ||||
| 					<enum name="partial"> | ||||
| 						<para>The Filter parameter contains a string | ||||
| 						which will be searched for in the contents of the MatchAgainst | ||||
| 						parameter.</para> | ||||
| 					<enum name="header(<header_name>)"> | ||||
| 						<para> | ||||
| 						Only events containing a header with a name of <replaceable>header_name</replaceable> | ||||
| 						will be included and the <literal>Filter</literal> parameter (if supplied) will only be | ||||
| 						matched against the value of the header. | ||||
| 						</para> | ||||
| 						<para> | ||||
| 						</para> | ||||
| 					</enum> | ||||
| 					<enum name="<match_method>"> | ||||
| 						<para>Specifies how the <literal>Filter</literal> parameter | ||||
| 						is to be applied to the results of applying any  | ||||
| 						<literal>name(<event_name>)</literal> and/or | ||||
| 						<literal>header(<header_name>)</literal> parameters | ||||
| 						above. | ||||
| 						</para> | ||||
| 						<para> | ||||
| 						One of the following: | ||||
| 						</para> | ||||
| 						<enumlist> | ||||
| 							<enum name="regex"> | ||||
| 								<para>The <literal>Filter</literal> parameter contains a regular expression | ||||
| 								which will be matched against the result. (default) | ||||
| 								</para> | ||||
| 								<para> | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 							<enum name="exact"> | ||||
| 								<para>The <literal>Filter</literal> parameter contains a string which must | ||||
| 								exactly match the entire result. | ||||
| 								</para> | ||||
| 								<para> | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 							<enum name="startsWith"> | ||||
| 								<para>The <literal>Filter</literal> parameter contains a string which must | ||||
| 								match the beginning of the result. | ||||
| 								</para> | ||||
| 								<para> | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 							<enum name="endsWith"> | ||||
| 								<para>The <literal>Filter</literal> parameter contains a string which must | ||||
| 								match the end of the result. | ||||
| 								</para> | ||||
| 								<para> | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 							<enum name="contains"> | ||||
| 								<para>The <literal>Filter</literal> parameter contains a string | ||||
| 								which will be searched for in the result. | ||||
| 								</para> | ||||
| 								<para> | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 							<enum name="none"> | ||||
| 								<para>The <literal>Filter</literal> parameter is ignored. | ||||
| 								</para> | ||||
| 							</enum> | ||||
| 						</enumlist> | ||||
| 					</enum>	 | ||||
| 				</enumlist> | ||||
| 				<para>The default is <literal>regex</literal></para> | ||||
| 			</parameter> | ||||
| 			<parameter name="MatchAgainst"> | ||||
| 				<para>MatchAgainst can be one of the following:</para> | ||||
| 				<enumlist> | ||||
| 					<enum name="name"> | ||||
| 						<para>Match only against the event name.</para> | ||||
| 					</enum> | ||||
| 					<enum name="header(header_name)"> | ||||
| 						<para>Match only against the contents of this event header.</para> | ||||
| 					</enum> | ||||
| 					<enum name="all"> | ||||
| 						<para>Match against the entire event payload.</para> | ||||
| 					</enum> | ||||
| 				</enumlist> | ||||
| 				<para>The default is <literal>all</literal></para> | ||||
| 			</parameter> | ||||
| 			<parameter name="Filter"> | ||||
| 				<para>Filters can be whitelist or blacklist</para> | ||||
| 				<para>Example whitelist filter: "Event: Newchannel"</para> | ||||
| 				<para>Example blacklist filter: "!Channel: DAHDI.*"</para> | ||||
| 				<para>This filter option is used to whitelist or blacklist events per user to be | ||||
| 				reported with regular expressions and are allowed if both the regex matches | ||||
| 				and the user has read access as defined in manager.conf. Filters are assumed to be for whitelisting | ||||
| 				unless preceeded by an exclamation point, which marks it as being black. | ||||
| 				Evaluation of the filters is as follows:</para> | ||||
| 				<para>- If no filters are configured all events are reported as normal.</para> | ||||
| 				<para>- If there are white filters only: implied black all filter processed first, then white filters.</para> | ||||
| 				<para>- If there are black filters only: implied white all filter processed first, then black filters.</para> | ||||
| 				<para>- If there are both white and black filters: implied black all filter processed first, then white | ||||
| 				filters, and lastly black filters.</para> | ||||
| 				<para>The match expression to be applied to the event.</para> | ||||
| 				<para>See the manager.conf.sample file in the configs/samples | ||||
| 				directory of the Asterisk source tree for more information.</para> | ||||
| 			</parameter> | ||||
| 		</syntax> | ||||
| 		<description> | ||||
| 			<para>The filters added are only used for the current session. | ||||
| 			Once the connection is closed the filters are removed.</para> | ||||
| 			<para>This comand requires the system permission because | ||||
| 			<para>See the manager.conf.sample file in the configs/samples | ||||
| 			directory of the Asterisk source tree for a full description | ||||
| 			and examples.</para> | ||||
| 			<note> | ||||
| 			<para> | ||||
| 			The filters added are only used for the current session. | ||||
| 			Once the connection is closed the filters are removed. | ||||
| 			</para> | ||||
| 			</note> | ||||
| 			<note> | ||||
| 			<para> | ||||
| 			This comand requires the system permission because | ||||
| 			this command can be used to create filters that may bypass | ||||
| 			filters defined in manager.conf</para> | ||||
| 			filters defined in manager.conf | ||||
| 			</para> | ||||
| 			</note> | ||||
| 		</description> | ||||
| 	</manager> | ||||
| 	<manager name="BlindTransfer" language="en_US"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user