ctx_checker 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +17 -0
  3. data/COUNTER_CONTRACT.md +33 -0
  4. data/LICENSE +22 -0
  5. data/README-zh.md +93 -0
  6. data/README.md +93 -0
  7. data/docs/architecture-zh.md +487 -0
  8. data/docs/release.md +13 -0
  9. data/examples/offline.rb +17 -0
  10. data/lib/ctx_checker/applicability.rb +187 -0
  11. data/lib/ctx_checker/checks/aggregation.rb +73 -0
  12. data/lib/ctx_checker/checks/alarms.rb +25 -0
  13. data/lib/ctx_checker/checks/base.rb +66 -0
  14. data/lib/ctx_checker/checks/clock.rb +30 -0
  15. data/lib/ctx_checker/checks/counters.rb +77 -0
  16. data/lib/ctx_checker/checks/device_counters.rb +32 -0
  17. data/lib/ctx_checker/checks/hardware.rb +45 -0
  18. data/lib/ctx_checker/checks/interfaces.rb +35 -0
  19. data/lib/ctx_checker/checks/ntp.rb +47 -0
  20. data/lib/ctx_checker/checks/optics.rb +107 -0
  21. data/lib/ctx_checker/checks/resources.rb +63 -0
  22. data/lib/ctx_checker/checks/routing.rb +86 -0
  23. data/lib/ctx_checker/checks/temperature.rb +53 -0
  24. data/lib/ctx_checker/cisco_ios/parsers/show_clock_detail.rb +56 -0
  25. data/lib/ctx_checker/cisco_ios/parsers/show_environment_all.rb +153 -0
  26. data/lib/ctx_checker/cisco_ios/parsers/show_etherchannel_summary.rb +110 -0
  27. data/lib/ctx_checker/cisco_ios/parsers/show_facility_alarm_status.rb +41 -0
  28. data/lib/ctx_checker/cisco_ios/parsers/show_interfaces.rb +140 -0
  29. data/lib/ctx_checker/cisco_ios/parsers/show_interfaces_transceiver_detail.rb +107 -0
  30. data/lib/ctx_checker/cisco_ios/parsers/show_ip_bgp_summary.rb +164 -0
  31. data/lib/ctx_checker/cisco_ios/parsers/show_ip_ospf_neighbor.rb +96 -0
  32. data/lib/ctx_checker/cisco_ios/parsers/show_ip_traffic.rb +65 -0
  33. data/lib/ctx_checker/cisco_ios/parsers/show_memory_statistics.rb +36 -0
  34. data/lib/ctx_checker/cisco_ios/parsers/show_ntp_status.rb +44 -0
  35. data/lib/ctx_checker/cisco_ios/parsers/show_processes_cpu.rb +45 -0
  36. data/lib/ctx_checker/cisco_ios/parsers/system_values.rb +62 -0
  37. data/lib/ctx_checker/cisco_ios/profile.rb +39 -0
  38. data/lib/ctx_checker/cisco_nxos/parsers/show_bgp_ipv4_unicast_summary.rb +69 -0
  39. data/lib/ctx_checker/cisco_nxos/parsers/show_clock.rb +13 -0
  40. data/lib/ctx_checker/cisco_nxos/parsers/show_environment.rb +157 -0
  41. data/lib/ctx_checker/cisco_nxos/parsers/show_interface.rb +78 -0
  42. data/lib/ctx_checker/cisco_nxos/parsers/show_interface_transceiver_details.rb +141 -0
  43. data/lib/ctx_checker/cisco_nxos/parsers/show_ip_ospf_neighbors.rb +14 -0
  44. data/lib/ctx_checker/cisco_nxos/parsers/show_ip_traffic.rb +151 -0
  45. data/lib/ctx_checker/cisco_nxos/parsers/show_ntp_peer_status.rb +116 -0
  46. data/lib/ctx_checker/cisco_nxos/parsers/show_port_channel_summary.rb +21 -0
  47. data/lib/ctx_checker/cisco_nxos/parsers/show_system_resources.rb +89 -0
  48. data/lib/ctx_checker/cisco_nxos/profile.rb +35 -0
  49. data/lib/ctx_checker/collector.rb +175 -0
  50. data/lib/ctx_checker/evaluator.rb +49 -0
  51. data/lib/ctx_checker/failure.rb +24 -0
  52. data/lib/ctx_checker/finding.rb +19 -0
  53. data/lib/ctx_checker/h3c/parsers/counters_table.rb +56 -0
  54. data/lib/ctx_checker/h3c/parsers/display_alarm_active.rb +43 -0
  55. data/lib/ctx_checker/h3c/parsers/display_bgp_peer.rb +44 -0
  56. data/lib/ctx_checker/h3c/parsers/display_clock.rb +72 -0
  57. data/lib/ctx_checker/h3c/parsers/display_counters_inbound_interface.rb +21 -0
  58. data/lib/ctx_checker/h3c/parsers/display_counters_outbound_interface.rb +21 -0
  59. data/lib/ctx_checker/h3c/parsers/display_cpu_usage.rb +64 -0
  60. data/lib/ctx_checker/h3c/parsers/display_environment.rb +74 -0
  61. data/lib/ctx_checker/h3c/parsers/display_fan.rb +72 -0
  62. data/lib/ctx_checker/h3c/parsers/display_interface.rb +127 -0
  63. data/lib/ctx_checker/h3c/parsers/display_link_aggregation_verbose.rb +72 -0
  64. data/lib/ctx_checker/h3c/parsers/display_memory.rb +132 -0
  65. data/lib/ctx_checker/h3c/parsers/display_ntp_service_status.rb +84 -0
  66. data/lib/ctx_checker/h3c/parsers/display_ospf_peer.rb +47 -0
  67. data/lib/ctx_checker/h3c/parsers/display_power.rb +63 -0
  68. data/lib/ctx_checker/h3c/parsers/display_transceiver_diagnosis.rb +109 -0
  69. data/lib/ctx_checker/h3c/parsers/system_values.rb +46 -0
  70. data/lib/ctx_checker/h3c/profile.rb +49 -0
  71. data/lib/ctx_checker/hillstone/parsers/show_clock.rb +68 -0
  72. data/lib/ctx_checker/hillstone/parsers/show_cpu.rb +44 -0
  73. data/lib/ctx_checker/hillstone/parsers/show_cpu_cntr.rb +114 -0
  74. data/lib/ctx_checker/hillstone/parsers/show_environment.rb +90 -0
  75. data/lib/ctx_checker/hillstone/parsers/show_interface.rb +82 -0
  76. data/lib/ctx_checker/hillstone/parsers/show_interface_counter.rb +53 -0
  77. data/lib/ctx_checker/hillstone/parsers/show_ip_bgp_summary.rb +22 -0
  78. data/lib/ctx_checker/hillstone/parsers/show_ip_ospf_neighbor.rb +21 -0
  79. data/lib/ctx_checker/hillstone/parsers/show_memory.rb +85 -0
  80. data/lib/ctx_checker/hillstone/parsers/show_ntp_status.rb +110 -0
  81. data/lib/ctx_checker/hillstone/parsers/show_transceiver.rb +101 -0
  82. data/lib/ctx_checker/hillstone/profile.rb +40 -0
  83. data/lib/ctx_checker/observation.rb +165 -0
  84. data/lib/ctx_checker/observation_merger.rb +80 -0
  85. data/lib/ctx_checker/palo_alto/parsers/show_clock.rb +50 -0
  86. data/lib/ctx_checker/palo_alto/parsers/show_counter_global.rb +47 -0
  87. data/lib/ctx_checker/palo_alto/parsers/show_counter_interface_all.rb +68 -0
  88. data/lib/ctx_checker/palo_alto/parsers/show_interface_all.rb +70 -0
  89. data/lib/ctx_checker/palo_alto/parsers/show_lacp_aggregate_ethernet.rb +52 -0
  90. data/lib/ctx_checker/palo_alto/parsers/show_ntp.rb +78 -0
  91. data/lib/ctx_checker/palo_alto/parsers/show_routing_protocol_bgp_peer.rb +66 -0
  92. data/lib/ctx_checker/palo_alto/parsers/show_routing_protocol_ospf_neighbor.rb +54 -0
  93. data/lib/ctx_checker/palo_alto/parsers/show_system_environmentals.rb +142 -0
  94. data/lib/ctx_checker/palo_alto/parsers/show_system_resources.rb +102 -0
  95. data/lib/ctx_checker/palo_alto/parsers/show_system_state_alarms.rb +54 -0
  96. data/lib/ctx_checker/palo_alto/parsers/show_transceiver_all.rb +44 -0
  97. data/lib/ctx_checker/palo_alto/profile.rb +39 -0
  98. data/lib/ctx_checker/parser_registry.rb +43 -0
  99. data/lib/ctx_checker/parsers/base.rb +68 -0
  100. data/lib/ctx_checker/parsers/interface_names.rb +65 -0
  101. data/lib/ctx_checker/parsers/scoped_result.rb +35 -0
  102. data/lib/ctx_checker/policy.rb +104 -0
  103. data/lib/ctx_checker/radware_alteon/parsers/info_l2_lacp_dump.rb +48 -0
  104. data/lib/ctx_checker/radware_alteon/parsers/info_l2_trunk.rb +46 -0
  105. data/lib/ctx_checker/radware_alteon/parsers/info_l3_bgp_summary.rb +22 -0
  106. data/lib/ctx_checker/radware_alteon/parsers/info_l3_ip.rb +71 -0
  107. data/lib/ctx_checker/radware_alteon/parsers/info_l3_ospf_nbr.rb +22 -0
  108. data/lib/ctx_checker/radware_alteon/parsers/info_link.rb +44 -0
  109. data/lib/ctx_checker/radware_alteon/parsers/info_sys_fan.rb +47 -0
  110. data/lib/ctx_checker/radware_alteon/parsers/info_sys_general.rb +48 -0
  111. data/lib/ctx_checker/radware_alteon/parsers/info_sys_ps.rb +34 -0
  112. data/lib/ctx_checker/radware_alteon/parsers/info_sys_temp.rb +53 -0
  113. data/lib/ctx_checker/radware_alteon/parsers/info_transceiver.rb +68 -0
  114. data/lib/ctx_checker/radware_alteon/parsers/stats_mp_cpu.rb +39 -0
  115. data/lib/ctx_checker/radware_alteon/parsers/stats_mp_mem.rb +58 -0
  116. data/lib/ctx_checker/radware_alteon/parsers/stats_port_ether.rb +67 -0
  117. data/lib/ctx_checker/radware_alteon/parsers/stats_port_if.rb +74 -0
  118. data/lib/ctx_checker/radware_alteon/parsers/stats_sp_allutils.rb +99 -0
  119. data/lib/ctx_checker/radware_alteon/parsers/stats_sys_ntp.rb +86 -0
  120. data/lib/ctx_checker/radware_alteon/port_counter_parser.rb +34 -0
  121. data/lib/ctx_checker/radware_alteon/profile.rb +145 -0
  122. data/lib/ctx_checker/radware_alteon.rb +8 -0
  123. data/lib/ctx_checker/report.rb +112 -0
  124. data/lib/ctx_checker/runtime_parser.rb +234 -0
  125. data/lib/ctx_checker/snapshot.rb +44 -0
  126. data/lib/ctx_checker/system_policy.rb +70 -0
  127. data/lib/ctx_checker/system_record.rb +81 -0
  128. data/lib/ctx_checker/version.rb +6 -0
  129. data/lib/ctx_checker.rb +17 -0
  130. metadata +271 -0
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "observation"
4
+
5
+ module CtxChecker
6
+ # 运行限制由可配置策略定义,不作为硬件规格。
7
+ class SystemPolicy
8
+ DEFAULT_RESOURCES = CtxParser::Immutable.copy(cpu: { warning: 80, critical: 95 }, memory: { warning: 85, critical: 95 })
9
+ attr_reader :resource_thresholds, :temperature_thresholds, :required_components,
10
+ :required_dimensions, :max_clock_skew_seconds, :max_ntp_offset_ms, :device_counter_limits
11
+
12
+ # 校验并冻结运行限制及必需组件选择。
13
+ def initialize(resource_thresholds: {}, temperature_thresholds: {}, required_components: {}, required_dimensions: [],
14
+ max_clock_skew_seconds: 300, max_ntp_offset_ms: 100, device_counter_limits: {})
15
+ resources!(resource_thresholds)
16
+ temperatures!(temperature_thresholds)
17
+ components!(required_components)
18
+ unless required_dimensions.is_a?(Array) && required_dimensions.uniq == required_dimensions && (required_dimensions - Observation::NAMES).empty?
19
+ raise ArgumentError, "Required dimensions must be unique known names"
20
+ end
21
+ [ max_clock_skew_seconds, max_ntp_offset_ms ].each do |value|
22
+ raise ArgumentError, "Time limits must be finite and nonnegative" unless SystemRecord.number?(value) && value >= 0
23
+ end
24
+ unless device_counter_limits.is_a?(Hash) && device_counter_limits.all? { |metric, limit| SystemRecord.text?(metric) && limit.is_a?(Integer) && limit >= 0 }
25
+ raise ArgumentError, "Device counter limits require named metrics and nonnegative integer deltas"
26
+ end
27
+ @resource_thresholds = CtxParser::Immutable.copy(DEFAULT_RESOURCES.merge(resource_thresholds))
28
+ @temperature_thresholds, @required_components, @required_dimensions, @device_counter_limits =
29
+ [ temperature_thresholds, required_components, required_dimensions, device_counter_limits ].map { |value| CtxParser::Immutable.copy(value) }
30
+ @max_clock_skew_seconds, @max_ntp_offset_ms = max_clock_skew_seconds, max_ntp_offset_ms
31
+ freeze
32
+ end
33
+
34
+ # 检查策略是否明确要求此资源或功能。
35
+ def required?(name) = required_dimensions.include?(name) || required_components.fetch(name, []).any?
36
+
37
+ private
38
+
39
+ # 两个资源阈值必须明确且有序,拒绝仅替换其中一个。
40
+ def resources!(values)
41
+ unless values.is_a?(Hash) && (values.keys - DEFAULT_RESOURCES.keys).empty? && values.values.all? do |row|
42
+ row.is_a?(Hash) && row.keys.sort == %i[critical warning] && row.values.all? { |value| SystemRecord.number?(value) && value.between?(0, 100) } && row[:warning] <= row[:critical]
43
+ end
44
+ raise ArgumentError, "Resource thresholds require ordered warning and critical percentages"
45
+ end
46
+ end
47
+
48
+ # 校验温度限制及各传感器的策略覆盖值。
49
+ def temperatures!(values)
50
+ unless values.is_a?(Hash) && values.all? do |component, row|
51
+ SystemRecord.text?(component) && row.is_a?(Hash) && (row.keys & Observation::OPTICAL_THRESHOLDS).any? &&
52
+ (row.keys - Observation::OPTICAL_THRESHOLDS - [ :high_comparison ]).empty? &&
53
+ (!row.key?(:high_comparison) || %i[gt gte].include?(row[:high_comparison])) &&
54
+ row.except(:high_comparison).values.all? { |value| SystemRecord.number?(value) } &&
55
+ row.values_at(*Observation::OPTICAL_THRESHOLDS).compact.each_cons(2).all? { |low, high| low <= high }
56
+ end
57
+ raise ArgumentError, "Temperature policies require exact sensors and ordered Celsius limits"
58
+ end
59
+ end
60
+
61
+ # 校验必需环境组件与允许的状态。
62
+ def components!(values)
63
+ unless values.is_a?(Hash) && (values.keys - %i[temperature environment power]).empty? && values.values.all? do |names|
64
+ names.is_a?(Array) && names.uniq == names && names.all? { |name| SystemRecord.text?(name) }
65
+ end
66
+ raise ArgumentError, "Required hardware components must be unique names by dimension"
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "time"
4
+ require "date"
5
+ require "ctx_parser/immutable"
6
+
7
+ module CtxChecker
8
+ # 标准化系统测量保留来源作用域与计算依据。
9
+ module SystemRecord
10
+ FIELDS = CtxParser::Immutable.copy(
11
+ cpu: %i[component scope window_seconds utilization interrupt_utilization],
12
+ memory: %i[component scope utilization total_bytes used_bytes free_bytes available_bytes basis status],
13
+ temperature: %i[component value low_alarm low_warning high_warning high_alarm high_comparison status],
14
+ environment: %i[component kind status],
15
+ power: %i[component kind status present watts capacity_watts],
16
+ clock: %i[component time source synchronized],
17
+ ntp: %i[component synchronized stratum reference peer offset_ms leap last_sync_status last_sync_at],
18
+ alarms: %i[component alarm_id severity active count],
19
+ device_counters: %i[component metric category value discontinuity sampled_at])
20
+ IDENTITIES = CtxParser::Immutable.copy(cpu: %i[component scope window_seconds], memory: %i[component scope],
21
+ temperature: %i[component], environment: %i[component kind], power: %i[component kind],
22
+ clock: %i[component], ntp: %i[component], alarms: %i[component alarm_id], device_counters: %i[component metric])
23
+ REQUIRED = CtxParser::Immutable.copy(FIELDS.keys.to_h do |name|
24
+ fields = case name
25
+ when :cpu, :memory then %i[component scope]
26
+ when :alarms then %i[component alarm_id]
27
+ when :device_counters then %i[component metric]
28
+ else %i[component]
29
+ end
30
+ [ name, fields ]
31
+ end)
32
+ STATES = %i[ok warning critical failed absent unknown].freeze
33
+ BASES = %i[used_total available used_minus_cache used_including_cache unknown].freeze
34
+ CATEGORIES = %i[error discard policy informational unknown].freeze
35
+
36
+ # 校验测量值,不将不可用读数转换为零或 false。
37
+ def self.valid?(name, key, value)
38
+ case key
39
+ when :status then STATES.include?(value)
40
+ when :basis then BASES.include?(value)
41
+ when :kind
42
+ (name == :power ? %i[power_supply power_rail unknown] : %i[fan voltage module clock overall unknown]).include?(value)
43
+ when :severity then %i[info warning critical unknown].include?(value)
44
+ when :category then CATEGORIES.include?(value)
45
+ when :last_sync_status then %i[succeeded failed unknown].include?(value)
46
+ when :high_comparison then %i[gt gte].include?(value)
47
+ when :utilization, :interrupt_utilization then number?(value) && value.between?(0, 100)
48
+ when :window_seconds, :total_bytes, :used_bytes, :free_bytes, :available_bytes, :count
49
+ value.is_a?(Integer) && value >= 0
50
+ when :stratum then value.is_a?(Integer) && value.between?(0, 16)
51
+ when :leap then value.is_a?(Integer) && value.between?(0, 3)
52
+ when :present, :synchronized, :active then value == true || value == false
53
+ when :watts, :capacity_watts then number?(value) && value >= 0
54
+ when :value then name == :device_counters ? value.is_a?(Integer) && value >= 0 : number?(value)
55
+ when :low_alarm, :low_warning, :high_warning, :high_alarm, :offset_ms then number?(value)
56
+ when :discontinuity then value.is_a?(Integer) && value >= 0 || text?(value)
57
+ when :time, :sampled_at, :last_sync_at then timestamp?(value)
58
+ else text?(value)
59
+ end
60
+ end
61
+
62
+ # 识别有限数值策略值,不强制转换任意字符串。
63
+ def self.number?(value) = value.is_a?(Numeric) && value.real? && value.finite?
64
+ # 校验非空文本,拒绝将含控制字符的值作为标识。
65
+ def self.text?(value) = value.is_a?(String) && !value.strip.empty? && !/[\x00-\x1f\x7f]/.match?(value)
66
+
67
+ # 没有时区的本地时间不能安全地与采集器时间比较。
68
+ def self.timestamp?(value)
69
+ return false unless value.is_a?(String) && /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})\z/.match?(value)
70
+ Date.iso8601(value[0, 10])
71
+ return false unless value[11, 2].to_i < 24 && value[14, 2].to_i < 60 && value[17, 2].to_i < 60
72
+ if (offset = /[+-](\d{2}):(\d{2})\z/.match(value))
73
+ return false unless offset[1].to_i < 24 && offset[2].to_i < 60
74
+ end
75
+ Time.iso8601(value)
76
+ true
77
+ rescue ArgumentError
78
+ false
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CtxChecker
4
+ # 公开包版本,供 RubyGems 元数据和运行时调用方共用。
5
+ VERSION = "0.1.0"
6
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ctx_checker/version"
4
+
5
+ module CtxChecker
6
+ # 独立运行时由 Ruby 管理延迟加载,同时保留 Zeitwerk 已有注册。
7
+ {
8
+ Observation: "observation", Snapshot: "snapshot", Policy: "policy", Finding: "finding",
9
+ Report: "report", Evaluator: "evaluator", RuntimeParser: "runtime_parser", Collector: "collector", Applicability: "applicability",
10
+ SystemPolicy: "system_policy", SystemRecord: "system_record", ObservationMerger: "observation_merger", Failure: "failure",
11
+ ParserRegistry: "parser_registry", Parsers: "parsers/base", H3c: "h3c/profile",
12
+ CiscoIos: "cisco_ios/profile", CiscoNxos: "cisco_nxos/profile", PaloAlto: "palo_alto/profile",
13
+ Hillstone: "hillstone/profile", RadwareAlteon: "radware_alteon"
14
+ }.each do |name, path|
15
+ autoload(name, File.expand_path("ctx_checker/#{path}", __dir__)) unless const_defined?(name, false)
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,271 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ctx_checker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Gatework contributors
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ctx_parser
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: ctx_driver
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: date
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: digest
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: ipaddr
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: json
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: time
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Normalize interfaces, routing protocols, optical metrics, system resources
111
+ and counters into evidence-aware health reports.
112
+ executables: []
113
+ extensions: []
114
+ extra_rdoc_files: []
115
+ files:
116
+ - CHANGELOG.md
117
+ - COUNTER_CONTRACT.md
118
+ - LICENSE
119
+ - README-zh.md
120
+ - README.md
121
+ - docs/architecture-zh.md
122
+ - docs/release.md
123
+ - examples/offline.rb
124
+ - lib/ctx_checker.rb
125
+ - lib/ctx_checker/applicability.rb
126
+ - lib/ctx_checker/checks/aggregation.rb
127
+ - lib/ctx_checker/checks/alarms.rb
128
+ - lib/ctx_checker/checks/base.rb
129
+ - lib/ctx_checker/checks/clock.rb
130
+ - lib/ctx_checker/checks/counters.rb
131
+ - lib/ctx_checker/checks/device_counters.rb
132
+ - lib/ctx_checker/checks/hardware.rb
133
+ - lib/ctx_checker/checks/interfaces.rb
134
+ - lib/ctx_checker/checks/ntp.rb
135
+ - lib/ctx_checker/checks/optics.rb
136
+ - lib/ctx_checker/checks/resources.rb
137
+ - lib/ctx_checker/checks/routing.rb
138
+ - lib/ctx_checker/checks/temperature.rb
139
+ - lib/ctx_checker/cisco_ios/parsers/show_clock_detail.rb
140
+ - lib/ctx_checker/cisco_ios/parsers/show_environment_all.rb
141
+ - lib/ctx_checker/cisco_ios/parsers/show_etherchannel_summary.rb
142
+ - lib/ctx_checker/cisco_ios/parsers/show_facility_alarm_status.rb
143
+ - lib/ctx_checker/cisco_ios/parsers/show_interfaces.rb
144
+ - lib/ctx_checker/cisco_ios/parsers/show_interfaces_transceiver_detail.rb
145
+ - lib/ctx_checker/cisco_ios/parsers/show_ip_bgp_summary.rb
146
+ - lib/ctx_checker/cisco_ios/parsers/show_ip_ospf_neighbor.rb
147
+ - lib/ctx_checker/cisco_ios/parsers/show_ip_traffic.rb
148
+ - lib/ctx_checker/cisco_ios/parsers/show_memory_statistics.rb
149
+ - lib/ctx_checker/cisco_ios/parsers/show_ntp_status.rb
150
+ - lib/ctx_checker/cisco_ios/parsers/show_processes_cpu.rb
151
+ - lib/ctx_checker/cisco_ios/parsers/system_values.rb
152
+ - lib/ctx_checker/cisco_ios/profile.rb
153
+ - lib/ctx_checker/cisco_nxos/parsers/show_bgp_ipv4_unicast_summary.rb
154
+ - lib/ctx_checker/cisco_nxos/parsers/show_clock.rb
155
+ - lib/ctx_checker/cisco_nxos/parsers/show_environment.rb
156
+ - lib/ctx_checker/cisco_nxos/parsers/show_interface.rb
157
+ - lib/ctx_checker/cisco_nxos/parsers/show_interface_transceiver_details.rb
158
+ - lib/ctx_checker/cisco_nxos/parsers/show_ip_ospf_neighbors.rb
159
+ - lib/ctx_checker/cisco_nxos/parsers/show_ip_traffic.rb
160
+ - lib/ctx_checker/cisco_nxos/parsers/show_ntp_peer_status.rb
161
+ - lib/ctx_checker/cisco_nxos/parsers/show_port_channel_summary.rb
162
+ - lib/ctx_checker/cisco_nxos/parsers/show_system_resources.rb
163
+ - lib/ctx_checker/cisco_nxos/profile.rb
164
+ - lib/ctx_checker/collector.rb
165
+ - lib/ctx_checker/evaluator.rb
166
+ - lib/ctx_checker/failure.rb
167
+ - lib/ctx_checker/finding.rb
168
+ - lib/ctx_checker/h3c/parsers/counters_table.rb
169
+ - lib/ctx_checker/h3c/parsers/display_alarm_active.rb
170
+ - lib/ctx_checker/h3c/parsers/display_bgp_peer.rb
171
+ - lib/ctx_checker/h3c/parsers/display_clock.rb
172
+ - lib/ctx_checker/h3c/parsers/display_counters_inbound_interface.rb
173
+ - lib/ctx_checker/h3c/parsers/display_counters_outbound_interface.rb
174
+ - lib/ctx_checker/h3c/parsers/display_cpu_usage.rb
175
+ - lib/ctx_checker/h3c/parsers/display_environment.rb
176
+ - lib/ctx_checker/h3c/parsers/display_fan.rb
177
+ - lib/ctx_checker/h3c/parsers/display_interface.rb
178
+ - lib/ctx_checker/h3c/parsers/display_link_aggregation_verbose.rb
179
+ - lib/ctx_checker/h3c/parsers/display_memory.rb
180
+ - lib/ctx_checker/h3c/parsers/display_ntp_service_status.rb
181
+ - lib/ctx_checker/h3c/parsers/display_ospf_peer.rb
182
+ - lib/ctx_checker/h3c/parsers/display_power.rb
183
+ - lib/ctx_checker/h3c/parsers/display_transceiver_diagnosis.rb
184
+ - lib/ctx_checker/h3c/parsers/system_values.rb
185
+ - lib/ctx_checker/h3c/profile.rb
186
+ - lib/ctx_checker/hillstone/parsers/show_clock.rb
187
+ - lib/ctx_checker/hillstone/parsers/show_cpu.rb
188
+ - lib/ctx_checker/hillstone/parsers/show_cpu_cntr.rb
189
+ - lib/ctx_checker/hillstone/parsers/show_environment.rb
190
+ - lib/ctx_checker/hillstone/parsers/show_interface.rb
191
+ - lib/ctx_checker/hillstone/parsers/show_interface_counter.rb
192
+ - lib/ctx_checker/hillstone/parsers/show_ip_bgp_summary.rb
193
+ - lib/ctx_checker/hillstone/parsers/show_ip_ospf_neighbor.rb
194
+ - lib/ctx_checker/hillstone/parsers/show_memory.rb
195
+ - lib/ctx_checker/hillstone/parsers/show_ntp_status.rb
196
+ - lib/ctx_checker/hillstone/parsers/show_transceiver.rb
197
+ - lib/ctx_checker/hillstone/profile.rb
198
+ - lib/ctx_checker/observation.rb
199
+ - lib/ctx_checker/observation_merger.rb
200
+ - lib/ctx_checker/palo_alto/parsers/show_clock.rb
201
+ - lib/ctx_checker/palo_alto/parsers/show_counter_global.rb
202
+ - lib/ctx_checker/palo_alto/parsers/show_counter_interface_all.rb
203
+ - lib/ctx_checker/palo_alto/parsers/show_interface_all.rb
204
+ - lib/ctx_checker/palo_alto/parsers/show_lacp_aggregate_ethernet.rb
205
+ - lib/ctx_checker/palo_alto/parsers/show_ntp.rb
206
+ - lib/ctx_checker/palo_alto/parsers/show_routing_protocol_bgp_peer.rb
207
+ - lib/ctx_checker/palo_alto/parsers/show_routing_protocol_ospf_neighbor.rb
208
+ - lib/ctx_checker/palo_alto/parsers/show_system_environmentals.rb
209
+ - lib/ctx_checker/palo_alto/parsers/show_system_resources.rb
210
+ - lib/ctx_checker/palo_alto/parsers/show_system_state_alarms.rb
211
+ - lib/ctx_checker/palo_alto/parsers/show_transceiver_all.rb
212
+ - lib/ctx_checker/palo_alto/profile.rb
213
+ - lib/ctx_checker/parser_registry.rb
214
+ - lib/ctx_checker/parsers/base.rb
215
+ - lib/ctx_checker/parsers/interface_names.rb
216
+ - lib/ctx_checker/parsers/scoped_result.rb
217
+ - lib/ctx_checker/policy.rb
218
+ - lib/ctx_checker/radware_alteon.rb
219
+ - lib/ctx_checker/radware_alteon/parsers/info_l2_lacp_dump.rb
220
+ - lib/ctx_checker/radware_alteon/parsers/info_l2_trunk.rb
221
+ - lib/ctx_checker/radware_alteon/parsers/info_l3_bgp_summary.rb
222
+ - lib/ctx_checker/radware_alteon/parsers/info_l3_ip.rb
223
+ - lib/ctx_checker/radware_alteon/parsers/info_l3_ospf_nbr.rb
224
+ - lib/ctx_checker/radware_alteon/parsers/info_link.rb
225
+ - lib/ctx_checker/radware_alteon/parsers/info_sys_fan.rb
226
+ - lib/ctx_checker/radware_alteon/parsers/info_sys_general.rb
227
+ - lib/ctx_checker/radware_alteon/parsers/info_sys_ps.rb
228
+ - lib/ctx_checker/radware_alteon/parsers/info_sys_temp.rb
229
+ - lib/ctx_checker/radware_alteon/parsers/info_transceiver.rb
230
+ - lib/ctx_checker/radware_alteon/parsers/stats_mp_cpu.rb
231
+ - lib/ctx_checker/radware_alteon/parsers/stats_mp_mem.rb
232
+ - lib/ctx_checker/radware_alteon/parsers/stats_port_ether.rb
233
+ - lib/ctx_checker/radware_alteon/parsers/stats_port_if.rb
234
+ - lib/ctx_checker/radware_alteon/parsers/stats_sp_allutils.rb
235
+ - lib/ctx_checker/radware_alteon/parsers/stats_sys_ntp.rb
236
+ - lib/ctx_checker/radware_alteon/port_counter_parser.rb
237
+ - lib/ctx_checker/radware_alteon/profile.rb
238
+ - lib/ctx_checker/report.rb
239
+ - lib/ctx_checker/runtime_parser.rb
240
+ - lib/ctx_checker/snapshot.rb
241
+ - lib/ctx_checker/system_policy.rb
242
+ - lib/ctx_checker/system_record.rb
243
+ - lib/ctx_checker/version.rb
244
+ homepage: https://github.com/gatework/ctx_checker
245
+ licenses:
246
+ - MIT
247
+ metadata:
248
+ source_code_uri: https://github.com/gatework/ctx_checker
249
+ bug_tracker_uri: https://github.com/gatework/ctx_checker/issues
250
+ changelog_uri: https://github.com/gatework/ctx_checker/blob/main/CHANGELOG.md
251
+ documentation_uri: https://github.com/gatework/ctx_checker#readme
252
+ allowed_push_host: https://rubygems.org
253
+ rubygems_mfa_required: 'true'
254
+ rdoc_options: []
255
+ require_paths:
256
+ - lib
257
+ required_ruby_version: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: 4.0.6
262
+ required_rubygems_version: !ruby/object:Gem::Requirement
263
+ requirements:
264
+ - - ">="
265
+ - !ruby/object:Gem::Version
266
+ version: '0'
267
+ requirements: []
268
+ rubygems_version: 4.0.16
269
+ specification_version: 4
270
+ summary: Analyze multi-vendor network runtime health.
271
+ test_files: []