[asterisk-dev] [Code Review]: Add AMI event documentation
Matt Jordan
reviewboard at asterisk.org
Mon Jun 11 09:08:53 CDT 2012
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/Makefile, line 318
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28640#file28640line318>
> >
> > Is 'make full' so python isn't a build dependency? Or is it to avoid the additional time in the build?
Yes :-)
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/get_documentation.py, line 1
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28649#file28649line1>
> >
> > If you care about making the formatting conform to PEP8:
> >
> >
> > $ pep8 build_tools/get_documentation.py
> > build_tools/get_documentation.py:17:1: E302 expected 2 blank lines, found 1
> > build_tools/get_documentation.py:26:1: E302 expected 2 blank lines, found 1
> > build_tools/get_documentation.py:48:18: E702 multiple statements on one line (semicolon)
> > build_tools/get_documentation.py:57:80: E501 line too long (104 characters)
> > build_tools/get_documentation.py:57:67: E231 missing whitespace after ','
> > build_tools/get_documentation.py:79:80: E501 line too long (118 characters)
> > build_tools/get_documentation.py:80:66: E231 missing whitespace after ','
> > build_tools/get_documentation.py:108:52: E231 missing whitespace after ','
> > build_tools/get_documentation.py:109:38: W291 trailing whitespace
> > build_tools/get_documentation.py:110:80: E501 line too long (81 characters)
> > build_tools/get_documentation.py:111:80: E501 line too long (91 characters)
> > build_tools/get_documentation.py:116:80: E501 line too long (120 characters)
> > build_tools/get_documentation.py:118:1: E302 expected 2 blank lines, found 1
> > build_tools/get_documentation.py:160:26: W292 no newline at end of file
> >
I do, fixed
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/get_documentation.py, lines 42-43
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28649#file28649line42>
> >
> > You can also do:
> >
> > for line in sys.stdin:
Much better, fixed
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/get_documentation.py, line 45
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28649#file28649line45>
> >
> > Did you mean if len(line) here?
> >
> > If line was None, an Exception would occur on the line before this one.
Yes, fixed
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/get_documentation.py, line 103
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28649#file28649line103>
> >
> > Did you mean if not len(parameter) ?
Yes, fixed
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/post_process_documentation.py, line 1
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28650#file28650line1>
> >
> > If you care about PEP8:
> >
> >
> > $ pep8 build_tools/post_process_documentation.py
> > build_tools/post_process_documentation.py:18:1: E302 expected 2 blank lines, found 1
> > build_tools/post_process_documentation.py:26:80: E501 line too long (89 characters)
> > build_tools/post_process_documentation.py:29:80: E501 line too long (95 characters)
> > build_tools/post_process_documentation.py:32:80: E501 line too long (117 characters)
> > build_tools/post_process_documentation.py:36:80: E501 line too long (97 characters)
> > build_tools/post_process_documentation.py:38:80: E501 line too long (98 characters)
> > build_tools/post_process_documentation.py:40:1: E302 expected 2 blank lines, found 1
> > build_tools/post_process_documentation.py:47:1: E302 expected 2 blank lines, found 1
> > build_tools/post_process_documentation.py:65:1: E302 expected 2 blank lines, found 1
> > build_tools/post_process_documentation.py:71:44: E251 no spaces around keyword / parameter equals
> > build_tools/post_process_documentation.py:74:45: E251 no spaces around keyword / parameter equals
> > build_tools/post_process_documentation.py:93:26: W292 no newline at end of file
> >
I do, fixed
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/build_tools/post_process_documentation.py, line 38
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28650#file28650line38>
> >
> > Holy nesting depth, batman
Reduced to a manageable level.
> On June 10, 2012, 8:20 a.m., Russell Bryant wrote:
> > ./trunk/Makefile, line 507
> > <https://reviewboard.asterisk.org/r/1967/diff/2/?file=28640#file28640line507>
> >
> > It would be good to update validate-docs, too
Well, I'm hoping I don't have to. doc/full-en_US.xml actually produces two things: full-en_US.xml and core-en_US.xml. The extraction from the source produces full-en_US.xml, while the post-processing script (should) produce a DTD valid core-en_US.xml. So the same validation make target should work for both. (full-en_US.xml has no guarantee about having a valid schema, as its a 'temporary' artifact)
Now, if you run validate-docs before you run doc/full-en_US.xml, there's no promise on what it'll try to validate - an XML file produced from 'make' or an XML file produced from 'make full' - but that's not terribly surprising.
I went with the approach of having 'make' and 'make full' produce the same XML artifact so that I didn't have to update all of the internal references to core-en_US.xml (or core-*.xml in general). If you think that a different mechanism should be used, let me know.
- Matt
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1967/#review6429
-----------------------------------------------------------
On June 8, 2012, 8:33 a.m., Matt Jordan wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1967/
> -----------------------------------------------------------
>
> (Updated June 8, 2012, 8:33 a.m.)
>
>
> Review request for Asterisk Developers, Mark Michelson and wdoekes.
>
>
> Summary
> -------
>
> This patch begins to add AMI event documentation to Asterisk. This patch includes the following:
>
> * Pulling AMI event XML documentation out of the Asterisk source and into the XML documentation produced by the build tools
> * Validating the XML when -dev-mode is enabled
> * Reading/parsing the XML documentation when Asterisk starts
> * Two new CLI commands: 'manager show events' and 'manager show event [event_name]'
> * Event documentation for the core applications
>
> So... AMI events are a bit trickier then other things we've attempted to document in the past. There were a number of factors to consider when approaching this:
> 1. There are a lot of AMI events, and they are located throughout the code base
> 2. AMI events can occur multiple times with different parameters, but still be the same 'event' type
> 3. AMI events can occur multiple times, in different implementation files
> 4. There is a significant amount of repeated information between events
> 5. Much of the information that a person cares about (AMI event keys) are - more often then not - easily obtained from a method call
>
> To that end, documentation for AMI events is treated a bit differently then other items. There are a few major shifts in how the documentation is extracted:
> 1. The previous documentation extraction used an awk script that pulled the documentation from a single comment block (delineated by /*** DOCUMENTATION ... ***/). That still exists; however, if you want AMI event documentation, you have to use 'make full'. This calls a different documentation extraction script, written in python. That script lets us do a few things that the awk script did not:
> * Documentation can now exist anywhere in the source file
> * The documentation for manager events can be co-located with the method calls that raise the event. If the method call is recognized, event parameters are automatically read from the method call and populated in the documentation
> * Documentation is combined where appropriate. Thus, if the same event is raised in multiple places, the parameters only need to be defined once.
> 2. Previously, documentation was registered with the application/function/command that it was associated with. Events are never registered with any controller; requiring them to do so would incur a run-time performance penalty for little gain. Hence, the xmldoc core now allow documentation for an entire source type to be requested at run-time. When requested, the documentation is built from the XML read in.
>
> Example manager events:
>
> Event: ChanSpyStart
> [Synopsis]
> Raised when a channel has started spying on another channel.
>
> [Syntax]
> Event: ChanSpyStart
> SpyerChannel: <value>
> SpyeeChannel: <value>
>
> [See Also]
> ChanSpy(), ExtenSpy(), ChanSpyStop
>
> -----------------------
>
> Event: Dial
> [Synopsis]
> Raised when a dial action has started.
>
> [Syntax]
> Event: Dial
> SubEvent: <value>
> Channel: <value>
> Destination: <value>
> CallerIDNum: <value>
> CallerIDName: <value>
> ConnectedLineNum: <value>
> ConnectedLineName: <value>
> UniqueID: <value>
> DestUniqueID: <value>
> Dialstring: <value>
>
> [Arguments]
> SubEvent
> Begin
> End
> A sub event type, specifying whether or not the dial action has begun
> or ended.
>
> [Synopsis]
> Raised when a dial action has ended.
>
> [Syntax]
> Event: Dial
> DialStatus: <value>
> SubEvent: <value>
> Channel: <value>
> UniqueID: <value>
>
> [Arguments]
> DialStatus
> The value of the ${DIALSTATUS} channel variable.
> SubEvent
> Begin
> End
> A sub event type, specifying whether or not the dial action has begun
> or ended.
>
> ---------------------------------
>
> Event: QueueMemberStatus
> [Synopsis]
> Raised when a Queue member's status has changed.
>
> [Syntax]
> Event: QueueMemberStatus
> Queue: <value>
> Location: <value>
> MemberName: <value>
> StateInterface: <value>
> Membership: <value>
> Penalty: <value>
> CallsTaken: <value>
> LastCall: <value>
> Status: <value>
> Paused: <value>
>
> [Arguments]
> Queue
> The name of the queue.
> Location
> The queue member's channel technology or location.
> MemberName
> The name of the queue member.
> StateInterface
> Channel technology or location from which to read device state
> changes.
> Membership
> dynamic
> realtime
> static
> Penalty
> The penalty associated with the queue member.
> CallsTaken
> The number of calls this queue member has serviced.
> LastCall
> The time this member last took call, expressed in seconds since 00:00,
> Jan 1, 1970 UTC.
> Status
> The status of the queue member. This will be a device state value.
> Paused
> 0
> 1
>
>
> Diffs
> -----
>
> ./configure UNKNOWN
> ./trunk/Makefile 367982
> ./trunk/apps/app_chanspy.c 367982
> ./trunk/apps/app_confbridge.c 367982
> ./trunk/apps/app_dial.c 367982
> ./trunk/apps/app_meetme.c 367982
> ./trunk/apps/app_queue.c 367982
> ./trunk/apps/app_stack.c 367982
> ./trunk/apps/app_userevent.c 367982
> ./trunk/apps/app_voicemail.c 367982
> ./trunk/build_tools/get_documentation.py PRE-CREATION
> ./trunk/build_tools/post_process_documentation.py PRE-CREATION
> ./trunk/configure.ac 367982
> ./trunk/doc/appdocsxml.dtd 367982
> ./trunk/include/asterisk/xmldoc.h 367982
> ./trunk/main/manager.c 367982
> ./trunk/main/xmldoc.c 367982
> ./trunk/makeopts.in 367982
>
> Diff: https://reviewboard.asterisk.org/r/1967/diff
>
>
> Testing
> -------
>
>
> Thanks,
>
> Matt
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20120611/3075f168/attachment-0001.htm>
More information about the asterisk-dev
mailing list