Class: YamlBenchmark
- Inherits:
-
AuditBenchmark
- Object
- AuditBenchmark
- YamlBenchmark
- Defined in:
- lib/audit/lib/benchmark/yaml_benchmark.rb
Constant Summary collapse
- CHECK_FILE_EXTENSION =
".check"
- GROUP_FILE_EXTENSION =
".group"
- GROUP_ID =
"ID"
- GROUP_NAME =
"Name"
- GROUP_DESCRIPTION =
"Description"
- GROUP_CHILDREN =
"Children"
- CHECK_ID =
"ID"
- CHECK_SCRIPT =
"Script"
- CHECK_NAME =
"Name"
- CHECK_DEPENDENCIES =
"Depends"
- CHECK_DESCRIPTION =
"Description"
- CHECK_DURATION =
"Duration"
- BENCHMARK_ID =
"BENCHMARK"
Instance Attribute Summary collapse
-
#children ⇒ Object
readonly
Returns the value of attribute children.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Attributes inherited from AuditBenchmark
Instance Method Summary collapse
-
#element_impl(name) ⇒ Object
get a raw benchmark element by name.
- #get_item(id) ⇒ Object
-
#initialize(options) ⇒ YamlBenchmark
constructor
A new instance of YamlBenchmark.
Methods inherited from AuditBenchmark
#automatic_dependencies, #dependencies, #duration, #element, #execution_order, #rules, #to_hash
Constructor Details
#initialize(options) ⇒ YamlBenchmark
Returns a new instance of YamlBenchmark.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 32 def initialize() raise "Need option :benchmark" unless [:benchmark] if [:logger] @logger = [:logger] else @logger = Logger.new(STDOUT) end if !File.exist?([:benchmark]) then @logger.error("Specified benchmark file '#{[:benchmark]}' does not exist") raise "Specified benchmark file '#{[:benchmark]}' does not exist" end @logger.info("Loading benchmark '#{[:benchmark]}'") @item_repository = {} @benchmark_file = [:benchmark] group_hashes = [] check_hashes = [] Zip::ZipFile.open(@benchmark_file, Zip::ZipFile::CREATE) do|zipfile| zipfile.each do|file| if file.name =~ /\.group$/ then @logger.debug {"Loading group '#{file.name}'"} hash = YAML::load( file.get_input_stream ) raise "The group file '#{group_file}' does not contain the group's ID" unless hash[GROUP_ID] raise "The group file '#{group_file}' does not contain any children" unless hash[GROUP_CHILDREN] @item_repository[hash[CHECK_ID]] = Group.new(hash[GROUP_ID], hash[GROUP_NAME], hash[GROUP_DESCRIPTION]) group_hashes << hash # keep group hash for later, because we still need to add children to the group elsif file.name =~ /\.check$/ then @logger.debug {"Loading check '#{file.name}'"} hash = YAML::load( file.get_input_stream ) raise "The check file '#{file.name}' does not contain the check's ID" unless hash[CHECK_ID] raise "The check file '#{file.name}' does not contain a check script" unless hash[CHECK_SCRIPT] @item_repository[hash[CHECK_ID]] = Check.new(hash[CHECK_ID], hash[CHECK_SCRIPT], hash[CHECK_NAME], [], hash[CHECK_DESCRIPTION], hash[CHECK_DURATION]) check_hashes << hash else @logger.info {"Ignoring unknown file '#{file.name}' in benchmark '#{@benchmark_file}'"} # unknown file, ignore end end end group_hashes.each do|group_hash| group = @item_repository[group_hash[GROUP_ID]] group_hash[GROUP_CHILDREN]. each do|child| raise ItemNotFoundException.new(child), "Item '#{child}' from group '#{group.id}' not found" unless @item_repository[child] item = @item_repository[child] raise BadItemClassErooxception, "Item '#{child}' from group '#{group.id}' has wrong item class '#{item.class.name}'" unless item.class == Check || item.class == Group group.children << item end end # set dependencies check_hashes.each do|check_hash| check = @item_repository[check_hash[CHECK_ID]] if check_hash[CHECK_DEPENDENCIES] then check_hash[CHECK_DEPENDENCIES].each do|dep| raise ItemNotFoundException.new(dep), "Item '#{dep}' which is depended on by check '#{check.id}' not found" unless @item_repository[dep] check.dependencies << @item_repository[dep] end end end benchmark = @item_repository[BENCHMARK_ID] or raise ItemNotFoundException.new("benchmark.group"), "Benchmark file benchmark.group not found in benchmark zipfile '#{benchmark_file}'" raise BadItemClassException, "Benchmark has wrong item class #{benchmark.class.name}, expected is Group" unless benchmark.class == Group @item_repository.delete(BENCHMARK_ID) #The benchmark group is not really an item, so remove it from the item set @id = benchmark.id @name = benchmark.name @description = benchmark.description @children = benchmark.children auto_deps = AutomaticDependencies.new(automatic_dependencies()) @item_repository[auto_deps.id] = auto_deps @children = [auto_deps] + benchmark.children end |
Instance Attribute Details
#children ⇒ Object (readonly)
Returns the value of attribute children.
30 31 32 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 30 def children @children end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
29 30 31 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 29 def description @description end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
27 28 29 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 27 def id @id end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
28 29 30 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 28 def name @name end |
Instance Method Details
#element_impl(name) ⇒ Object
get a raw benchmark element by name. This is used by other classes like script generators to retrieve information from the benchmark that was stored there for them.
124 125 126 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 124 def element_impl(name) return Zip::ZipFile.open(@benchmark_file, Zip::ZipFile::CREATE) {|zipfile| zipfile.read(name)} end |
#get_item(id) ⇒ Object
128 129 130 131 |
# File 'lib/audit/lib/benchmark/yaml_benchmark.rb', line 128 def get_item(id) raise ItemNotFoundException.new(id), "Item #{id} not found" if @item_repository[id].nil? return @item_repository[id] end |