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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +17 -0
- data/COUNTER_CONTRACT.md +33 -0
- data/LICENSE +22 -0
- data/README-zh.md +93 -0
- data/README.md +93 -0
- data/docs/architecture-zh.md +487 -0
- data/docs/release.md +13 -0
- data/examples/offline.rb +17 -0
- data/lib/ctx_checker/applicability.rb +187 -0
- data/lib/ctx_checker/checks/aggregation.rb +73 -0
- data/lib/ctx_checker/checks/alarms.rb +25 -0
- data/lib/ctx_checker/checks/base.rb +66 -0
- data/lib/ctx_checker/checks/clock.rb +30 -0
- data/lib/ctx_checker/checks/counters.rb +77 -0
- data/lib/ctx_checker/checks/device_counters.rb +32 -0
- data/lib/ctx_checker/checks/hardware.rb +45 -0
- data/lib/ctx_checker/checks/interfaces.rb +35 -0
- data/lib/ctx_checker/checks/ntp.rb +47 -0
- data/lib/ctx_checker/checks/optics.rb +107 -0
- data/lib/ctx_checker/checks/resources.rb +63 -0
- data/lib/ctx_checker/checks/routing.rb +86 -0
- data/lib/ctx_checker/checks/temperature.rb +53 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_clock_detail.rb +56 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_environment_all.rb +153 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_etherchannel_summary.rb +110 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_facility_alarm_status.rb +41 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_interfaces.rb +140 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_interfaces_transceiver_detail.rb +107 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_ip_bgp_summary.rb +164 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_ip_ospf_neighbor.rb +96 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_ip_traffic.rb +65 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_memory_statistics.rb +36 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_ntp_status.rb +44 -0
- data/lib/ctx_checker/cisco_ios/parsers/show_processes_cpu.rb +45 -0
- data/lib/ctx_checker/cisco_ios/parsers/system_values.rb +62 -0
- data/lib/ctx_checker/cisco_ios/profile.rb +39 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_bgp_ipv4_unicast_summary.rb +69 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_clock.rb +13 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_environment.rb +157 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_interface.rb +78 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_interface_transceiver_details.rb +141 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_ip_ospf_neighbors.rb +14 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_ip_traffic.rb +151 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_ntp_peer_status.rb +116 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_port_channel_summary.rb +21 -0
- data/lib/ctx_checker/cisco_nxos/parsers/show_system_resources.rb +89 -0
- data/lib/ctx_checker/cisco_nxos/profile.rb +35 -0
- data/lib/ctx_checker/collector.rb +175 -0
- data/lib/ctx_checker/evaluator.rb +49 -0
- data/lib/ctx_checker/failure.rb +24 -0
- data/lib/ctx_checker/finding.rb +19 -0
- data/lib/ctx_checker/h3c/parsers/counters_table.rb +56 -0
- data/lib/ctx_checker/h3c/parsers/display_alarm_active.rb +43 -0
- data/lib/ctx_checker/h3c/parsers/display_bgp_peer.rb +44 -0
- data/lib/ctx_checker/h3c/parsers/display_clock.rb +72 -0
- data/lib/ctx_checker/h3c/parsers/display_counters_inbound_interface.rb +21 -0
- data/lib/ctx_checker/h3c/parsers/display_counters_outbound_interface.rb +21 -0
- data/lib/ctx_checker/h3c/parsers/display_cpu_usage.rb +64 -0
- data/lib/ctx_checker/h3c/parsers/display_environment.rb +74 -0
- data/lib/ctx_checker/h3c/parsers/display_fan.rb +72 -0
- data/lib/ctx_checker/h3c/parsers/display_interface.rb +127 -0
- data/lib/ctx_checker/h3c/parsers/display_link_aggregation_verbose.rb +72 -0
- data/lib/ctx_checker/h3c/parsers/display_memory.rb +132 -0
- data/lib/ctx_checker/h3c/parsers/display_ntp_service_status.rb +84 -0
- data/lib/ctx_checker/h3c/parsers/display_ospf_peer.rb +47 -0
- data/lib/ctx_checker/h3c/parsers/display_power.rb +63 -0
- data/lib/ctx_checker/h3c/parsers/display_transceiver_diagnosis.rb +109 -0
- data/lib/ctx_checker/h3c/parsers/system_values.rb +46 -0
- data/lib/ctx_checker/h3c/profile.rb +49 -0
- data/lib/ctx_checker/hillstone/parsers/show_clock.rb +68 -0
- data/lib/ctx_checker/hillstone/parsers/show_cpu.rb +44 -0
- data/lib/ctx_checker/hillstone/parsers/show_cpu_cntr.rb +114 -0
- data/lib/ctx_checker/hillstone/parsers/show_environment.rb +90 -0
- data/lib/ctx_checker/hillstone/parsers/show_interface.rb +82 -0
- data/lib/ctx_checker/hillstone/parsers/show_interface_counter.rb +53 -0
- data/lib/ctx_checker/hillstone/parsers/show_ip_bgp_summary.rb +22 -0
- data/lib/ctx_checker/hillstone/parsers/show_ip_ospf_neighbor.rb +21 -0
- data/lib/ctx_checker/hillstone/parsers/show_memory.rb +85 -0
- data/lib/ctx_checker/hillstone/parsers/show_ntp_status.rb +110 -0
- data/lib/ctx_checker/hillstone/parsers/show_transceiver.rb +101 -0
- data/lib/ctx_checker/hillstone/profile.rb +40 -0
- data/lib/ctx_checker/observation.rb +165 -0
- data/lib/ctx_checker/observation_merger.rb +80 -0
- data/lib/ctx_checker/palo_alto/parsers/show_clock.rb +50 -0
- data/lib/ctx_checker/palo_alto/parsers/show_counter_global.rb +47 -0
- data/lib/ctx_checker/palo_alto/parsers/show_counter_interface_all.rb +68 -0
- data/lib/ctx_checker/palo_alto/parsers/show_interface_all.rb +70 -0
- data/lib/ctx_checker/palo_alto/parsers/show_lacp_aggregate_ethernet.rb +52 -0
- data/lib/ctx_checker/palo_alto/parsers/show_ntp.rb +78 -0
- data/lib/ctx_checker/palo_alto/parsers/show_routing_protocol_bgp_peer.rb +66 -0
- data/lib/ctx_checker/palo_alto/parsers/show_routing_protocol_ospf_neighbor.rb +54 -0
- data/lib/ctx_checker/palo_alto/parsers/show_system_environmentals.rb +142 -0
- data/lib/ctx_checker/palo_alto/parsers/show_system_resources.rb +102 -0
- data/lib/ctx_checker/palo_alto/parsers/show_system_state_alarms.rb +54 -0
- data/lib/ctx_checker/palo_alto/parsers/show_transceiver_all.rb +44 -0
- data/lib/ctx_checker/palo_alto/profile.rb +39 -0
- data/lib/ctx_checker/parser_registry.rb +43 -0
- data/lib/ctx_checker/parsers/base.rb +68 -0
- data/lib/ctx_checker/parsers/interface_names.rb +65 -0
- data/lib/ctx_checker/parsers/scoped_result.rb +35 -0
- data/lib/ctx_checker/policy.rb +104 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_l2_lacp_dump.rb +48 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_l2_trunk.rb +46 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_l3_bgp_summary.rb +22 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_l3_ip.rb +71 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_l3_ospf_nbr.rb +22 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_link.rb +44 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_sys_fan.rb +47 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_sys_general.rb +48 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_sys_ps.rb +34 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_sys_temp.rb +53 -0
- data/lib/ctx_checker/radware_alteon/parsers/info_transceiver.rb +68 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_mp_cpu.rb +39 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_mp_mem.rb +58 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_port_ether.rb +67 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_port_if.rb +74 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_sp_allutils.rb +99 -0
- data/lib/ctx_checker/radware_alteon/parsers/stats_sys_ntp.rb +86 -0
- data/lib/ctx_checker/radware_alteon/port_counter_parser.rb +34 -0
- data/lib/ctx_checker/radware_alteon/profile.rb +145 -0
- data/lib/ctx_checker/radware_alteon.rb +8 -0
- data/lib/ctx_checker/report.rb +112 -0
- data/lib/ctx_checker/runtime_parser.rb +234 -0
- data/lib/ctx_checker/snapshot.rb +44 -0
- data/lib/ctx_checker/system_policy.rb +70 -0
- data/lib/ctx_checker/system_record.rb +81 -0
- data/lib/ctx_checker/version.rb +6 -0
- data/lib/ctx_checker.rb +17 -0
- 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
|
data/lib/ctx_checker.rb
ADDED
|
@@ -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: []
|