Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from cfg_checker.common import logger_cli 

2from cfg_checker.helpers import args_utils 

3from cfg_checker.modules.network import checker, mapper, pinger 

4 

5 

6command_help = "Network infrastructure checks and reports" 

7 

8 

9def init_parser(_parser): 

10 # network subparser 

11 net_subparsers = _parser.add_subparsers(dest='type') 

12 

13 net_check_parser = net_subparsers.add_parser( 

14 'check', 

15 help="Do network check and print the result" 

16 ) 

17 

18 net_check_parser.add_argument( 

19 '--detailed', 

20 action="store_true", default=False, 

21 help="Print error details after summary" 

22 ) 

23 

24 net_report_parser = net_subparsers.add_parser( 

25 'report', 

26 help="Generate network check report" 

27 ) 

28 

29 net_report_parser.add_argument( 

30 '--html', 

31 metavar='network_html_filename', 

32 help="HTML filename to save report" 

33 ) 

34 

35 net_ping_parser = net_subparsers.add_parser( 

36 'ping', 

37 help="Ping all nodes with each other using network CIDR" 

38 ) 

39 

40 net_ping_parser.add_argument( 

41 '--cidr', 

42 metavar='network_ping_cidr', 

43 help="Subnet CIDR to ping nodes in" 

44 ) 

45 net_ping_parser.add_argument( 

46 '--mtu', 

47 metavar='network_ping_mtu', 

48 help="MTU size to use. Ping will be done for MTU - 20 - 8" 

49 ) 

50 net_ping_parser.add_argument( 

51 '--detailed', 

52 action="store_true", default=False, 

53 help="Print detailed report at the end" 

54 ) 

55 

56 net_subparsers.add_parser( 

57 'map', 

58 help="Print network map" 

59 ) 

60 

61 net_subparsers.add_parser( 

62 'list', 

63 help="List networks in reclass" 

64 ) 

65 

66 return _parser 

67 

68 

69def do_check(args): 

70 # Net Checks 

71 # should not print map, etc... 

72 # Just bare summary and errors 

73 logger_cli.info("# Network check to console") 

74 netChecker = checker.NetworkChecker() 

75 netChecker.check_networks() 

76 

77 # save what was collected 

78 netChecker.errors.save_iteration_data() 

79 

80 # print a report 

81 netChecker.print_summary() 

82 

83 # if set, print details 

84 if args.detailed: 

85 netChecker.print_error_details() 

86 

87 

88def do_report(args): 

89 # Network Report 

90 # should generate Static HTML page 

91 # with node/network map and values 

92 

93 logger_cli.info("# Network report (check, node map") 

94 

95 _filename = args_utils.get_arg(args, 'html') 

96 

97 netChecker = checker.NetworkChecker() 

98 netChecker.check_networks(map=False) 

99 

100 # save what was collected 

101 netChecker.errors.save_iteration_data() 

102 netChecker.create_html_report(_filename) 

103 

104 return 

105 

106 

107def do_map(args): 

108 # Network Map 

109 # Should generate network map to console or HTML 

110 logger_cli.info("# Network report") 

111 

112 networkMap = mapper.NetworkMapper() 

113 networkMap.prepare_all_maps() 

114 networkMap.create_map() 

115 networkMap.print_map() 

116 

117 return 

118 

119 

120def do_list(args): 

121 # Network List 

122 # Should generate network map to console or HTML 

123 _map = mapper.NetworkMapper() 

124 reclass = _map.map_network(_map.RECLASS) 

125 runtime = _map.map_network(_map.RUNTIME) 

126 

127 _s = [str(_n) for _n in reclass.keys()] 

128 logger_cli.info("\n# Reclass networks list") 

129 logger_cli.info("\n".join(_s)) 

130 _s = [str(_n) for _n in runtime.keys()] 

131 logger_cli.info("\n# Runtime networks list") 

132 logger_cli.info("\n".join(_s)) 

133 

134 return 

135 

136 

137def do_ping(args): 

138 # Network pinger 

139 # Checks if selected nodes are pingable 

140 # with a desireble parameters: MTU, Frame, etc 

141 if not args.cidr: 

142 logger_cli.error("\n# Use mcp-check network list to get list of CIDRs") 

143 _cidr = args_utils.get_arg(args, "cidr") 

144 _pinger = pinger.NetworkPinger(mtu=args.mtu, detailed=args.detailed) 

145 

146 _ret = _pinger.ping_nodes(_cidr) 

147 

148 if _ret < 0: 

149 # no need to save the iterations and summary 

150 return 

151 else: 

152 # save what was collected 

153 _pinger.errors.save_iteration_data() 

154 

155 # print a report 

156 _pinger.print_summary() 

157 

158 # if set, print details 

159 if args.detailed: 

160 _pinger.print_details() 

161 

162 return 

163 

164 

165def do_trace(args): 

166 # Network packet tracer 

167 # Check if packet is delivered to proper network host 

168 logger_cli.info("# Packet Tracer not yet implemented") 

169 

170 # TODO: Packet tracer 

171 

172 return