mirror of
				https://github.com/vyos/vyos-documentation.git
				synced 2025-10-26 08:41:46 +01:00 
			
		
		
		
	improve coverage with all real vyos commands exported from iso
This commit is contained in:
		
							parent
							
								
									336b4498b8
								
							
						
					
					
						commit
						68a335a086
					
				| @ -1,14 +1,13 @@ | ||||
| ''' | ||||
| generate json with all commands from xml for vyos documentation coverage | ||||
| 
 | ||||
| ''' | ||||
| 
 | ||||
| 
 | ||||
| import sys | ||||
| import os | ||||
| import json | ||||
| import re | ||||
| import logging | ||||
| import datetime | ||||
| 
 | ||||
| from io import BytesIO | ||||
| from lxml import etree as ET | ||||
| @ -33,11 +32,32 @@ input_data = [ | ||||
|     } | ||||
| ] | ||||
| 
 | ||||
| vyos_commands_dir = "_include/coverage" | ||||
| 
 | ||||
| node_data = { | ||||
|     'cfgcmd': {}, | ||||
|     'opcmd': {}, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| def get_vyos_commands(): | ||||
|     return_data = None | ||||
|     for (dirpath, dirnames, filenames) in os.walk(vyos_commands_dir): | ||||
|         for file in filenames: | ||||
|             with open(f"{vyos_commands_dir}/{file}") as f: | ||||
|                 data = json.load(f) | ||||
|              | ||||
|             if not return_data: | ||||
|                 return_data = data | ||||
|              | ||||
|             # find latestes export | ||||
|             if datetime.datetime.fromisoformat(return_data['date']) < datetime.datetime.fromisoformat(data['date']): | ||||
|                 return_data = data | ||||
|      | ||||
|     return return_data | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| def get_properties(p): | ||||
|     props = {} | ||||
|     props['valueless'] = False | ||||
| @ -378,6 +398,4 @@ def override_element(l: list): | ||||
|         el.getparent().remove(el) | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     res = get_working_commands() | ||||
|     print(json.dumps(res)) | ||||
|     #print(res['cfgcmd'][0]) | ||||
|     get_vyos_commands() | ||||
|  | ||||
| @ -8,7 +8,7 @@ from docutils.parsers.rst import Directive, directives, states | ||||
| 
 | ||||
| from sphinx.util.docutils import SphinxDirective | ||||
| 
 | ||||
| from testcoverage import get_working_commands | ||||
| from testcoverage import get_working_commands, get_vyos_commands | ||||
| 
 | ||||
| from sphinx.util import logging | ||||
| 
 | ||||
| @ -28,6 +28,11 @@ def setup(app): | ||||
|         #{"cfgcmd": [], "opcmd": []}, | ||||
|         'html' | ||||
|     ) | ||||
|     app.add_config_value( | ||||
|         'vyos_commands', | ||||
|         get_vyos_commands(), | ||||
|         'html' | ||||
|     ) | ||||
|     app.add_config_value( | ||||
|         'vyos_coverage', | ||||
|         { | ||||
| @ -550,17 +555,20 @@ def build_row(app, fromdocname, rowdata): | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
| def process_coverage(app, fromdocname, doccmd, xmlcmd, vyoscmd, cli_type): | ||||
|     coverage_list = {} | ||||
|     strip_true_list = [] | ||||
|     for cmd in doccmd: | ||||
|         coverage_item = { | ||||
|             'doccmd': None, | ||||
|             'xmlcmd': None, | ||||
|             'vyoscmd': None, | ||||
|             'doccmd_item': None, | ||||
|             'xmlcmd_item': None, | ||||
|             'vyoscmd_item': None, | ||||
|             'indocs': False, | ||||
|             'inxml': False, | ||||
|             'invyos': False, | ||||
|             'xmlfilename': None | ||||
|         } | ||||
|         coverage_item['doccmd'] = cmd['cmd'] | ||||
| @ -576,10 +584,13 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|             coverage_item = { | ||||
|                 'doccmd': None, | ||||
|                 'xmlcmd': None, | ||||
|                 'vyoscmd': None, | ||||
|                 'doccmd_item': None, | ||||
|                 'xmlcmd_item': None, | ||||
|                 'vyoscmd_item': None, | ||||
|                 'indocs': False, | ||||
|                 'inxml': False, | ||||
|                 'invyos': False, | ||||
|                 'xmlfilename': None | ||||
|             } | ||||
|             coverage_item['xmlcmd'] = cmd['cmd'] | ||||
| @ -592,9 +603,35 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|             coverage_list[strip]['xmlcmd_item'] = cmd | ||||
|             coverage_list[strip]['inxml'] = True | ||||
|             coverage_list[strip]['xmlfilename'] = cmd['filename'] | ||||
| 
 | ||||
|      | ||||
|     for item in vyoscmd[cli_type]: | ||||
|         cmd = ' '.join(item['cmd']) | ||||
|         strip = strip_cmd(cmd) | ||||
|         if strip not in coverage_list.keys(): | ||||
|             coverage_item = { | ||||
|                 'doccmd': None, | ||||
|                 'xmlcmd': None, | ||||
|                 'vyoscmd': None, | ||||
|                 'doccmd_item': None, | ||||
|                 'xmlcmd_item': None, | ||||
|                 'vyoscmd_item': None, | ||||
|                 'indocs': False, | ||||
|                 'inxml': False, | ||||
|                 'invyos': False, | ||||
|                 'xmlfilename': None | ||||
|             } | ||||
|             coverage_item['vyoscmd'] = cmd | ||||
|             coverage_item['invyos'] = True | ||||
|             coverage_list[strip] = dict(coverage_item) | ||||
|         else: | ||||
|             coverage_list[strip]['vyoscmd'] = cmd | ||||
|             coverage_list[strip]['invyos'] = True | ||||
|             if coverage_list[strip]['indocs'] and coverage_list[strip]['inxml']: | ||||
|                 strip_true_list.append(strip) | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|     strip_true_list = list(set(strip_true_list)) | ||||
| 
 | ||||
|     # to find syntax errors in cfg or cmd commands | ||||
| @ -605,11 +642,11 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|      | ||||
| 
 | ||||
|     table = nodes.table() | ||||
|     tgroup = nodes.tgroup(cols=3) | ||||
|     tgroup = nodes.tgroup(cols=4) | ||||
|     table += tgroup | ||||
| 
 | ||||
|     header = (f'Status {len(strip_true_list)}/{len(coverage_list)}', 'Documentaion', 'XML') | ||||
|     colwidths = (5, 50 , 50) | ||||
|     header = (f'Status {len(strip_true_list)}/{len(coverage_list)}', 'Documentation', 'XML', f'in VyOS {vyoscmd["os"]}') | ||||
|     colwidths = (5, 33 , 33, 33) | ||||
|     table = nodes.table() | ||||
|     tgroup = nodes.tgroup(cols=len(header)) | ||||
|     table += tgroup | ||||
| @ -623,6 +660,7 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|     for entry in sorted(coverage_list): | ||||
|         doc_cmd_text = [] | ||||
|         doc_xml_text = [] | ||||
|         doc_vyos_text = [] | ||||
|         if coverage_list[entry]['indocs']: | ||||
|             doc_cmd_text.append(coverage_list[entry]['doccmd_item']) | ||||
|         else: | ||||
| @ -634,7 +672,13 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|         else: | ||||
|             doc_xml_text.append('Nothing found in XML Definitions') | ||||
|          | ||||
|         if not coverage_list[entry]['indocs'] or not coverage_list[entry]['inxml']: | ||||
|         if coverage_list[entry]['invyos']: | ||||
|             doc_vyos_text.append(coverage_list[entry]['vyoscmd']) | ||||
|         else: | ||||
|             doc_vyos_text.append('Nothing found in VyOS') | ||||
| 
 | ||||
| 
 | ||||
|         if not coverage_list[entry]['indocs'] or not coverage_list[entry]['inxml'] or not coverage_list[entry]['invyos']: | ||||
|             status = False | ||||
|         else: | ||||
|             status = True | ||||
| @ -643,7 +687,8 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): | ||||
|             ( | ||||
|                 status, | ||||
|                 doc_cmd_text, | ||||
|                 doc_xml_text | ||||
|                 doc_xml_text, | ||||
|                 doc_vyos_text | ||||
| 
 | ||||
|             ) | ||||
|         ) | ||||
| @ -678,6 +723,7 @@ def process_cmd_nodes(app, doctree, fromdocname): | ||||
|                         fromdocname, | ||||
|                         env.vyos_cfgcmd, | ||||
|                         app.config.vyos_working_commands['cfgcmd'], | ||||
|                         app.config.vyos_commands, | ||||
|                         'cfgcmd' | ||||
|                         ) | ||||
|                     ) | ||||
| @ -695,6 +741,7 @@ def process_cmd_nodes(app, doctree, fromdocname): | ||||
|                         fromdocname, | ||||
|                         env.vyos_opcmd, | ||||
|                         app.config.vyos_working_commands['opcmd'], | ||||
|                         app.config.vyos_commands, | ||||
|                         'opcmd' | ||||
|                         ) | ||||
|                     ) | ||||
|  | ||||
							
								
								
									
										120049
									
								
								docs/_include/coverage/20220531-1.4-rolling-202205310217.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120049
									
								
								docs/_include/coverage/20220531-1.4-rolling-202205310217.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -6,21 +6,23 @@ Overview over all commands, which are documented in the | ||||
| ``.. cfgcmd::`` or ``.. opcmd::`` Directives. | ||||
| 
 | ||||
| The build process take all xml definition files | ||||
| from `vyos-1x <https://github.com/vyos/vyos-1x>`_  and extract each leaf | ||||
| command or executable command. After this the commands are compare and shown in | ||||
| from `vyos-1x <https://github.com/vyos/vyos-1x>`_  and a periodical export of | ||||
| all VyOS commands and extract each leaf command or executable command. | ||||
| After this the commands are compare and shown in | ||||
| the following two tables. The script compare only the fixed part of a command. | ||||
| All varables or values will be erase and then compare: | ||||
| 
 | ||||
| for example there are these two commands: | ||||
| 
 | ||||
|   * documentation: ``interfaces ethernet <interface> address | ||||
|     <address | dhcp | dhcpv6>``` | ||||
|   * xml: ``interface ethernet <ethernet> address <address>`` | ||||
|     <address | dhcp | dhcpv6>`` | ||||
|   * xml: ``interfaces ethernet <ethernet> address <address>`` | ||||
|   * VyOS: ``interfaces ethernet <text> address <value>`` | ||||
| 
 | ||||
| Now the script earse all in between ``<`` and ``>`` and simply compare | ||||
| the strings. | ||||
| 
 | ||||
| **There are 2 kind of problems:**    | ||||
| **There are 3 kind of problems:**    | ||||
| 
 | ||||
| ``Not documented yet`` | ||||
| 
 | ||||
| @ -30,9 +32,14 @@ the strings. | ||||
| ``Nothing found in XML Definitions`` | ||||
| 
 | ||||
|   * ``.. cfgcmd::`` or ``.. opcmd::`` Command are not found in a XML command | ||||
|   * Maybe the command where changed in the XML Definition, or the feature is | ||||
|     not anymore in VyOS | ||||
|   * Some commands are not yet translated to XML | ||||
|   * Maybe the command where changed in the XML Definition, the feature is | ||||
|     not anymore in VyOS, or there is a typo | ||||
| 
 | ||||
| ``Nothing found in VyOS`` | ||||
| 
 | ||||
|   * ``.. cfgcmd::`` or ``.. opcmd::`` Command are not found in a VyOS command | ||||
|   * Maybe the command where changed, the feature is | ||||
|     not anymore in VyOS, or there is a typo | ||||
| 
 | ||||
| 
 | ||||
| Configuration Commands | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user