spectools 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +1 -0
- data/Manifest.txt +80 -0
- data/README.txt +33 -0
- data/README.vnmsh.txt +39 -0
- data/Rakefile +42 -0
- data/TODO +5 -0
- data/lib/spectools.rb +588 -0
- data/lib/spectools/version.rb +9 -0
- data/lib/vnmsh.rb +1930 -0
- data/test/data/connect.success +8 -0
- data/test/data/create.alarm +2 -0
- data/test/data/create.association +1 -0
- data/test/data/create.model +1 -0
- data/test/data/create.model.ip +1 -0
- data/test/data/destroy.alarm +1 -0
- data/test/data/destroy.association +1 -0
- data/test/data/destroy.model +9 -0
- data/test/data/seek +2 -0
- data/test/data/seek.-s +17 -0
- data/test/data/show.alarms +10 -0
- data/test/data/show.alarms-a +11 -0
- data/test/data/show.alarms-a-x +22 -0
- data/test/data/show.alarms-x +20 -0
- data/test/data/show.alarms.mh +1 -0
- data/test/data/show.associations +160 -0
- data/test/data/show.attributes +909 -0
- data/test/data/show.attributes.attr +2 -0
- data/test/data/show.attributes.attriid +2 -0
- data/test/data/show.attributes.attrname +6 -0
- data/test/data/show.attributes.attrr +14 -0
- data/test/data/show.attributes.enum +2 -0
- data/test/data/show.attributes.flags +16 -0
- data/test/data/show.attributes.mth +242 -0
- data/test/data/show.attributes.mth.attrr +12 -0
- data/test/data/show.children +47 -0
- data/test/data/show.children.rel +14 -0
- data/test/data/show.devices +21 -0
- data/test/data/show.enumerations +142383 -0
- data/test/data/show.enumerations.attr +4 -0
- data/test/data/show.enumerations.mth +149 -0
- data/test/data/show.events +2001 -0
- data/test/data/show.events-a +10001 -0
- data/test/data/show.events-n5 +6 -0
- data/test/data/show.events-x-n5 +21 -0
- data/test/data/show.inheritance +12 -0
- data/test/data/show.landscapes +3 -0
- data/test/data/show.models +2252 -0
- data/test/data/show.models.mhr +18 -0
- data/test/data/show.models.mname +4 -0
- data/test/data/show.models.mth +4 -0
- data/test/data/show.parents +6 -0
- data/test/data/show.relations +151 -0
- data/test/data/show.rules +5838 -0
- data/test/data/show.types +4210 -0
- data/test/data/show.types.flags +3137 -0
- data/test/data/show.types.mthr +55 -0
- data/test/data/show.types.mtname +2 -0
- data/test/data/show.watch +9 -0
- data/test/data/test.reconnect +1 -0
- data/test/data/update.alarm +1 -0
- data/test/data/update.model +3 -0
- data/test/test_helper.rb +2 -0
- data/test/test_spectools.rb +403 -0
- data/test/test_vnmsh.rb +1537 -0
- data/test/testcmds/ack +1 -0
- data/test/testcmds/connect +32 -0
- data/test/testcmds/create +34 -0
- data/test/testcmds/destroy +36 -0
- data/test/testcmds/disconnect +7 -0
- data/test/testcmds/seek +18 -0
- data/test/testcmds/show +243 -0
- data/test/testcmds/update +12 -0
- data/test/vnmsh/ack +1 -0
- data/test/vnmsh/connect +5 -0
- data/test/vnmsh/create +1 -0
- data/test/vnmsh/destroy +1 -0
- data/test/vnmsh/disconnect +1 -0
- data/test/vnmsh/seek +3 -0
- data/test/vnmsh/show +1 -0
- data/test/vnmsh/update +1 -0
- metadata +134 -0
data/CHANGELOG.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0 - Initial release.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
TODO
|
2
|
+
CHANGELOG.txt
|
3
|
+
Manifest.txt
|
4
|
+
README.txt
|
5
|
+
README.vnmsh.txt
|
6
|
+
Rakefile
|
7
|
+
lib/spectools.rb
|
8
|
+
lib/spectools/version.rb
|
9
|
+
lib/vnmsh.rb
|
10
|
+
test/data/connect.success
|
11
|
+
test/data/create.alarm
|
12
|
+
test/data/create.association
|
13
|
+
test/data/create.model
|
14
|
+
test/data/create.model.ip
|
15
|
+
test/data/destroy.alarm
|
16
|
+
test/data/destroy.association
|
17
|
+
test/data/destroy.model
|
18
|
+
test/data/seek
|
19
|
+
test/data/seek.-s
|
20
|
+
test/data/show.alarms
|
21
|
+
test/data/show.alarms-a
|
22
|
+
test/data/show.alarms-a-x
|
23
|
+
test/data/show.alarms-x
|
24
|
+
test/data/show.alarms.mh
|
25
|
+
test/data/show.associations
|
26
|
+
test/data/show.attributes
|
27
|
+
test/data/show.attributes.attr
|
28
|
+
test/data/show.attributes.attriid
|
29
|
+
test/data/show.attributes.attrname
|
30
|
+
test/data/show.attributes.attrr
|
31
|
+
test/data/show.attributes.enum
|
32
|
+
test/data/show.attributes.flags
|
33
|
+
test/data/show.attributes.mth
|
34
|
+
test/data/show.attributes.mth.attrr
|
35
|
+
test/data/show.children
|
36
|
+
test/data/show.children.rel
|
37
|
+
test/data/show.devices
|
38
|
+
test/data/show.enumerations
|
39
|
+
test/data/show.enumerations.attr
|
40
|
+
test/data/show.enumerations.mth
|
41
|
+
test/data/show.events
|
42
|
+
test/data/show.events-a
|
43
|
+
test/data/show.events-n5
|
44
|
+
test/data/show.events-x-n5
|
45
|
+
test/data/show.inheritance
|
46
|
+
test/data/show.landscapes
|
47
|
+
test/data/show.models
|
48
|
+
test/data/show.models.mhr
|
49
|
+
test/data/show.models.mname
|
50
|
+
test/data/show.models.mth
|
51
|
+
test/data/show.parents
|
52
|
+
test/data/show.relations
|
53
|
+
test/data/show.rules
|
54
|
+
test/data/show.types
|
55
|
+
test/data/show.types.flags
|
56
|
+
test/data/show.types.mthr
|
57
|
+
test/data/show.types.mtname
|
58
|
+
test/data/show.watch
|
59
|
+
test/data/test.reconnect
|
60
|
+
test/data/update.alarm
|
61
|
+
test/data/update.model
|
62
|
+
test/test_helper.rb
|
63
|
+
test/test_spectools.rb
|
64
|
+
test/test_vnmsh.rb
|
65
|
+
test/testcmds/ack
|
66
|
+
test/testcmds/connect
|
67
|
+
test/testcmds/create
|
68
|
+
test/testcmds/destroy
|
69
|
+
test/testcmds/disconnect
|
70
|
+
test/testcmds/seek
|
71
|
+
test/testcmds/show
|
72
|
+
test/testcmds/update
|
73
|
+
test/vnmsh/ack
|
74
|
+
test/vnmsh/connect
|
75
|
+
test/vnmsh/create
|
76
|
+
test/vnmsh/destroy
|
77
|
+
test/vnmsh/disconnect
|
78
|
+
test/vnmsh/seek
|
79
|
+
test/vnmsh/show
|
80
|
+
test/vnmsh/update
|
data/README.txt
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
SpecTools is a toolset designed to make working with CA's SPECTRUM product (now Network Fault Manager) much easier. The base library represents the SPECTRUM data model: Models, Events, Alarms, Model Types, etc. All extra functionality is provided by extensions.
|
2
|
+
|
3
|
+
Using the base SpecTools classes is very simple. Just require it!
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'spcetools'
|
7
|
+
|
8
|
+
model = SpecTools::Model.new
|
9
|
+
model.handle = 'test handle'
|
10
|
+
|
11
|
+
All of the classes have good RDoc, so reference it to see what the structure looks like.
|
12
|
+
|
13
|
+
Using Extensions.
|
14
|
+
|
15
|
+
SpecTools has a very easy way of adding extra functionality to the library, called extensions.
|
16
|
+
|
17
|
+
Using extensions.
|
18
|
+
|
19
|
+
Using an extension is usually just a matter of requiring the object. For example, to use
|
20
|
+
the CLI extenson, VNMSH, you would just:
|
21
|
+
|
22
|
+
require 'rubygems'
|
23
|
+
require 'spectools'
|
24
|
+
require 'vnmsh'
|
25
|
+
|
26
|
+
Extensions extend the SpecTools by adding methods to the SpecTools classes. The methods all share
|
27
|
+
a common prefix, which identifies the extension.`SpecTools has a config option,
|
28
|
+
SpecTools::Config.default_access_method , that allows a user to determine what extension methods
|
29
|
+
to use by default. For example, if SpecTools::Config.default_access_method = :cli , any method with
|
30
|
+
a cli_ prefix will be available without needing to use the prefix. To continue the example, calling
|
31
|
+
Model.find will automatically call Model.cli_find for you.
|
32
|
+
|
33
|
+
Currently, the only available extension is VNMSH. You can read more about it in README.vnmsh.
|
data/README.vnmsh.txt
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
What is VNMSH?
|
2
|
+
|
3
|
+
The VNMSH extension allows you to use SpecTools with the SPECTRUM
|
4
|
+
CLI interface. With few exceptions, anything you can do with CLI,
|
5
|
+
you can do with VNMSH. Also, the extension provides everything in
|
6
|
+
SpecTools objects, not a flat strings or lines, so the data looks much
|
7
|
+
more structures.
|
8
|
+
|
9
|
+
Using the VNMSH Extension for SpecTools
|
10
|
+
|
11
|
+
First, require both SpecTools and VNMSH:
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'spectools'
|
15
|
+
require 'vnmsh'
|
16
|
+
|
17
|
+
Now, we'll establish a new VNMSH connection. If you have SPECROOT
|
18
|
+
defined on the system, it is used, otherwise you'll need to pass
|
19
|
+
it in:
|
20
|
+
|
21
|
+
session = VNMSH.new
|
22
|
+
session.connect
|
23
|
+
|
24
|
+
You can now use any SpecTools method with a cli_ prefix. If you want
|
25
|
+
to use VNMSH as you're default access method with SpecTools, set
|
26
|
+
SpecTools::Config.default_access_method = :cli . This way, you won't
|
27
|
+
have to use the cli_ prefix when using VNMSH methods.
|
28
|
+
|
29
|
+
All cli methods take a session as the last parameter. The session is
|
30
|
+
VNMSH session that you connected with. If you want to use a session
|
31
|
+
and don't want to explictly pass it, you can simply assign your
|
32
|
+
connected session to VNMSH.default session:
|
33
|
+
|
34
|
+
VNMSH.default_session = session
|
35
|
+
|
36
|
+
Then you won't need to explictly pass a session over, however you can
|
37
|
+
still override the default session by explictly passing it.
|
38
|
+
|
39
|
+
Have fun using VNMSH!
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'hoe'
|
4
|
+
include FileUtils
|
5
|
+
require File.join(File.dirname(__FILE__), 'lib', 'spectools', 'version')
|
6
|
+
|
7
|
+
AUTHOR = "Donavan Pantke" # can also be an array of Authors
|
8
|
+
EMAIL = "spectools-general@rubyforge.org"
|
9
|
+
DESCRIPTION = "A utility suite for CA's SPECTRUM Network Fault Manager"
|
10
|
+
GEM_NAME = "spectools" # what ppl will type to install your gem
|
11
|
+
RUBYFORGE_PROJECT = "spectools" # The unix name for your project
|
12
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
13
|
+
|
14
|
+
|
15
|
+
NAME = "spectools"
|
16
|
+
REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
17
|
+
VERS = ENV['VERSION'] || (Spectools::VERSION::STRING + (REV ? ".#{REV}" : ""))
|
18
|
+
|
19
|
+
class Hoe
|
20
|
+
def extra_deps
|
21
|
+
@extra_deps.reject { |x| Array(x).first == 'hoe' }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
ENV['NODOT'] = '1'
|
25
|
+
# Generate all the Rake tasks
|
26
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
27
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
28
|
+
p.author = AUTHOR
|
29
|
+
p.description = DESCRIPTION
|
30
|
+
p.email = EMAIL
|
31
|
+
p.summary = DESCRIPTION
|
32
|
+
p.url = HOMEPATH
|
33
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
34
|
+
p.rdoc_pattern = /^(lib|bin)|txt|TODO$/
|
35
|
+
|
36
|
+
# p.clean_globs = CLEAN #An array of file patterns to delete on clean.
|
37
|
+
|
38
|
+
# == Optional
|
39
|
+
#p.changes - A description of the release's latest changes.
|
40
|
+
#p.extra_deps - An array of rubygem dependencies.
|
41
|
+
#p.spec_extras - A hash of extra values to set in the gemspec.
|
42
|
+
end
|
data/TODO
ADDED
data/lib/spectools.rb
ADDED
@@ -0,0 +1,588 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
# Copyright 2007 Donavan Pantke
|
6
|
+
|
7
|
+
#SpecTools is a set of classes designed to help admins of CA's Spectrum perform common functions
|
8
|
+
|
9
|
+
#We define here an extension to the String class to test if the string contains a valid Hex Code
|
10
|
+
class String #:nodoc:
|
11
|
+
def hex?
|
12
|
+
!((self =~ /^0x[a-fA-F0-9]+$/).nil?)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# == Utility Module for SpecTools
|
17
|
+
# The module defines some useful extensions that SpecTools utilizes.
|
18
|
+
module SpecToolsExtensions
|
19
|
+
|
20
|
+
# This method allows extension developers to extend SpecTools without having to redefine stock methods.
|
21
|
+
# call_extension is usually invoked through method_missing or call_default_extension. It takes a method (in symbol form)
|
22
|
+
# and appends the prefix defined in SpecTools::Config.default_access_method .
|
23
|
+
# Example:
|
24
|
+
#
|
25
|
+
# <tt>call_extension(:get_attr,*args)</tt>
|
26
|
+
#
|
27
|
+
# if SpecTools::Config.default_access_method is set to <tt>:access</tt>, call_extension will attempt call
|
28
|
+
# <tt>access_call_extension(*args)</tt>
|
29
|
+
# on itself, if the method is available. If the method does not exist, +NoMethodError+ is raised.
|
30
|
+
def call_extension(method,*args)
|
31
|
+
newmethod = SpecTools::Config.default_access_method.to_s + '_' + method.to_s
|
32
|
+
if self.respond_to?(newmethod.to_sym)
|
33
|
+
self.send(newmethod.to_sym, *args)
|
34
|
+
else
|
35
|
+
raise NoMethodError, "undefined method `#{newmethod}' for #{self}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def method_missing(method, *args) #:nodoc:
|
40
|
+
if SpecTools::Config.default_access_method != nil
|
41
|
+
call_extension(method,*args)
|
42
|
+
else
|
43
|
+
super.method_missing
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.method_missing(method, *args) #:nodoc:
|
48
|
+
if SpecTools::Config.default_access_method != nil
|
49
|
+
call_extension(method,*args)
|
50
|
+
else
|
51
|
+
super.method_missing
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
# This method is explicitly called by the standard SpecTools object methods.
|
57
|
+
#
|
58
|
+
# Calls call_extension with the method sent.
|
59
|
+
#
|
60
|
+
# If <tt>SpecTools::Config.default_access_method</tt> is not set, <tt>SpecTools::NoAccessMethodError</tt> is raised.
|
61
|
+
def call_default_extension(method,*args)
|
62
|
+
if SpecTools::Config.default_access_method != nil
|
63
|
+
call_extension(method,*args)
|
64
|
+
else
|
65
|
+
raise SpecTools::NoAccessMethodError, 'In order to use this method, you must define Config::default_access_method'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
module SpecTools
|
72
|
+
|
73
|
+
|
74
|
+
#Raised when SpecTools::Config.default_access_method is not set, and so the default accessor cannot be used.
|
75
|
+
class NoAccessMethodError < StandardError
|
76
|
+
end
|
77
|
+
|
78
|
+
#Raised when an attribute is assigned an incorrect value for its type. E.g. a list attribute is
|
79
|
+
#assigned a non-list value, or a non-list attribute is assigned a value_table.
|
80
|
+
class InvalidValueTypeError < StandardError
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
# == SpecTools::Config
|
88
|
+
# Contains module configuration.
|
89
|
+
class Config
|
90
|
+
|
91
|
+
class << self
|
92
|
+
#The default extension the data classes use when performing lookups.
|
93
|
+
#The VNMSH extension defines the :cli access method.
|
94
|
+
attr_accessor :default_access_method
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
# == SpecTools::Attr
|
100
|
+
# Represents a Spectrum Attribute
|
101
|
+
class Attr
|
102
|
+
|
103
|
+
extend SpecToolsExtensions
|
104
|
+
include SpecToolsExtensions
|
105
|
+
|
106
|
+
#The attribute ID
|
107
|
+
attr_accessor :id
|
108
|
+
#The attribute name
|
109
|
+
attr_accessor :name
|
110
|
+
#The value of the attribute.
|
111
|
+
#Cannot be written to if the attribute is a list.
|
112
|
+
#If read from a list attribute, returns the first
|
113
|
+
#value from the list.
|
114
|
+
attr_accessor :value
|
115
|
+
#For list attributes, a hash of instance-value pairs.
|
116
|
+
#Can only be set if the attribute is a list attribute.
|
117
|
+
attr_accessor :value_table
|
118
|
+
#A hash of the attribute's available enumerations
|
119
|
+
attr_accessor :enums
|
120
|
+
#The primitive type of the attribute
|
121
|
+
attr_accessor :type
|
122
|
+
#Set to true if the attribute is external
|
123
|
+
attr_accessor :external
|
124
|
+
#Set to true if the attribute is readable
|
125
|
+
attr_accessor :readable
|
126
|
+
#Set to true if the attribute is writeable
|
127
|
+
attr_accessor :writeable
|
128
|
+
#Set to true if the attribute is shared
|
129
|
+
attr_accessor :shared
|
130
|
+
#Set to true if the attribute is a list attribute
|
131
|
+
attr_accessor :list
|
132
|
+
#Set to true if the attribute is guaranteed
|
133
|
+
attr_accessor :guaranteed
|
134
|
+
#Set to true of the attribute is global
|
135
|
+
attr_accessor :global
|
136
|
+
#Set to true if the attribute is in memory
|
137
|
+
attr_accessor :memory
|
138
|
+
#Set to true if the attribute is a database attribute
|
139
|
+
attr_accessor :database
|
140
|
+
#Set to true if the attribute is polled
|
141
|
+
attr_accessor :polled
|
142
|
+
#Set to true if the attribute is logged
|
143
|
+
attr_accessor :logged
|
144
|
+
#Set to true if the attribute is preserved
|
145
|
+
attr_accessor :preserve
|
146
|
+
|
147
|
+
def initialize(id = nil, name = nil, value = nil, value_table = nil, enums = nil, list = false, type = nil, external = false, readable = false, writeable = false, shared = false, guaranteed = false, global = false, memory = false, database = false, polled = false, logged = false, preserve = false)
|
148
|
+
if id.nil? || id.hex?
|
149
|
+
@id = id
|
150
|
+
else
|
151
|
+
raise ArgumentError, "Id is not a hex code"
|
152
|
+
end
|
153
|
+
@name = name
|
154
|
+
@enums = enums
|
155
|
+
@type = type
|
156
|
+
@external = external
|
157
|
+
@readable = readable
|
158
|
+
@writeable = writeable
|
159
|
+
@shared = shared
|
160
|
+
@list = list
|
161
|
+
@guaranteed = guaranteed
|
162
|
+
@global = global
|
163
|
+
@memory = memory
|
164
|
+
@database = database
|
165
|
+
@polled = polled
|
166
|
+
@logged = logged
|
167
|
+
@preserve = preserve
|
168
|
+
if list
|
169
|
+
if value_table
|
170
|
+
@value_table = value_table
|
171
|
+
else
|
172
|
+
value_table = Hash.new
|
173
|
+
end
|
174
|
+
@value = nil
|
175
|
+
else
|
176
|
+
@value_table = nil
|
177
|
+
@value = value
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
#Override the default writer for value. If the attr is a list , raise an error.
|
182
|
+
def value=(value) #:nodoc:
|
183
|
+
if list
|
184
|
+
raise InvalidValueTypeError, 'Attempt to set a list attribute to a non-list value'
|
185
|
+
else
|
186
|
+
@value = value
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
#Override the default writer for value_table. If the attr is a not a list, raise an error
|
191
|
+
def value_table=(value) #:nodoc:
|
192
|
+
unless list
|
193
|
+
raise InvalidValueTypeError, 'Attempt to set a regular attribute to a list value.'
|
194
|
+
else
|
195
|
+
@value_table = value
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
#Override the default value accessor. If we're a list attribute, return the first value in the list.
|
200
|
+
def value #:nodoc:
|
201
|
+
if list && value_table
|
202
|
+
@value_table[value_table.keys.sort.first]
|
203
|
+
elsif list
|
204
|
+
nil
|
205
|
+
else
|
206
|
+
@value
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
#Override the default list writer. Populate the appropriate value attribute.
|
211
|
+
def list=(list) #:nodoc:
|
212
|
+
if list
|
213
|
+
@value_table = Hash.new unless @value_table
|
214
|
+
end
|
215
|
+
@list = list
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
#Look up the value of the given attribute and return its enumerated counterpart.
|
221
|
+
#If the Attr does not have a populated enums hash, will
|
222
|
+
#attempt to use SpecToolsExtensions#call_default_extension to obtain the enumerations
|
223
|
+
#via the <tt>get_enums</tt> method. If enumeration fails, the original value
|
224
|
+
#is returned. All <tt>args</tt> are used for the call to <tt>get_enums</tt>, if
|
225
|
+
#necessary.
|
226
|
+
#<b>Note:</b> Errors raised by a call to get_enums will not be caught.
|
227
|
+
def enumerate(*args)
|
228
|
+
if enums.kind_of?(Hash)
|
229
|
+
avail_enums = enums
|
230
|
+
else
|
231
|
+
begin
|
232
|
+
avail_enums = call_default_extension(:get_enums, *args)
|
233
|
+
rescue NoAccessMethodError, NoMethodError
|
234
|
+
avail_enums = {}
|
235
|
+
end
|
236
|
+
end
|
237
|
+
if avail_enums[value]
|
238
|
+
return avail_enums[value]
|
239
|
+
else
|
240
|
+
return value
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
#Change the value of the attribute to its enumerated string.
|
246
|
+
#If enumeration fails, the value is left unchanged.
|
247
|
+
#All arguments are passed through to enumerate.
|
248
|
+
def enumerate!(*args)
|
249
|
+
enum = enumerate(*args)
|
250
|
+
self.value = enum unless enum == value
|
251
|
+
end
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
end
|
256
|
+
|
257
|
+
# == SpecTools::MType
|
258
|
+
# Represents a Spectrum model type
|
259
|
+
class MType
|
260
|
+
|
261
|
+
extend SpecToolsExtensions
|
262
|
+
include SpecToolsExtensions
|
263
|
+
|
264
|
+
#The model type handle (mth)
|
265
|
+
attr_accessor :handle
|
266
|
+
#The model type's name
|
267
|
+
attr_accessor :name
|
268
|
+
#Set to true if the model type is visible
|
269
|
+
attr_accessor :visible
|
270
|
+
#Set to true if the model type can be instantiated
|
271
|
+
attr_accessor :instantiable
|
272
|
+
#Set to true if new model types can be derived from this one
|
273
|
+
attr_accessor :derivable
|
274
|
+
#Set to true if only one model of this type can exist
|
275
|
+
attr_accessor :unique
|
276
|
+
#Set to true if a model of the type must exist in the database
|
277
|
+
attr_accessor :required
|
278
|
+
#Set to true if models of this type can be destroyed
|
279
|
+
attr_accessor :destroyable
|
280
|
+
#An hash of Attr objects for this model type.
|
281
|
+
#When setting this attribute, you may either pass in a valid Hash
|
282
|
+
#or an Array of Attr objects
|
283
|
+
attr_accessor :attrs
|
284
|
+
#The type of inheritance
|
285
|
+
attr_accessor :inheritance
|
286
|
+
|
287
|
+
def initialize(handle = nil, name = nil, attrs=Hash.new, visible = false, instantiable = false, derivable = false, destroyable = true, unique = false, required = false,inheritance = nil)
|
288
|
+
if handle.nil? || handle.hex?
|
289
|
+
@handle = handle
|
290
|
+
else
|
291
|
+
raise ArgumentError, "Handle is not a hex code"
|
292
|
+
end
|
293
|
+
@name = name
|
294
|
+
@visible = visible
|
295
|
+
@instantiable = instantiable
|
296
|
+
@derivable = derivable
|
297
|
+
@destroyable = destroyable
|
298
|
+
@unique = unique
|
299
|
+
@required = required
|
300
|
+
@inheritance = inheritance
|
301
|
+
@attrs = populate(attrs)
|
302
|
+
end
|
303
|
+
|
304
|
+
#define a custom setter for attrs that will automatically convert
|
305
|
+
#an Array into a properly formatted hash.
|
306
|
+
def attrs=(new_attrs) #:nodoc:
|
307
|
+
if new_attrs.kind_of?(Hash)
|
308
|
+
@attrs = new_attrs
|
309
|
+
elsif new_attrs.kind_of?(Array)
|
310
|
+
@attrs = populate(new_attrs)
|
311
|
+
else
|
312
|
+
raise ArgumentError, 'attrs can only be assigned an Array or a Hash of Attr objects'
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
private
|
317
|
+
#Generate an attribute hash from an array
|
318
|
+
def populate(attrs)
|
319
|
+
attrs_hash = Hash.new
|
320
|
+
attrs.each do |specattr|
|
321
|
+
raise ArgumentError,
|
322
|
+
'The array can only contain SpecTools::Attr objects' unless specattr.kind_of?(Attr)
|
323
|
+
attrs_hash[specattr.id] = specattr
|
324
|
+
end
|
325
|
+
attrs_hash
|
326
|
+
end
|
327
|
+
|
328
|
+
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
# == SpecTools::Model
|
333
|
+
# Represents a Spectrum model
|
334
|
+
class Model
|
335
|
+
|
336
|
+
extend SpecToolsExtensions
|
337
|
+
include SpecToolsExtensions
|
338
|
+
|
339
|
+
#The model's handle
|
340
|
+
attr_accessor :handle
|
341
|
+
#The model's name
|
342
|
+
attr_accessor :name
|
343
|
+
#The model's MType
|
344
|
+
attr_accessor :type
|
345
|
+
#A hash of Attr objects for the model
|
346
|
+
attr_accessor :attrs
|
347
|
+
|
348
|
+
def initialize(handle = nil, name = nil, type = MType.new, *attrs)
|
349
|
+
if handle.nil? || handle.hex?
|
350
|
+
@handle = handle
|
351
|
+
else
|
352
|
+
raise ArgumentError, "Handle is not a hex code"
|
353
|
+
end
|
354
|
+
@name = name
|
355
|
+
@type = type
|
356
|
+
@attrs = Hash.new
|
357
|
+
attrs.each do |specattr|
|
358
|
+
if specattr.nil? || specattr.instance_of?(Attr)
|
359
|
+
@attrs[specattr.id] = specattr
|
360
|
+
else
|
361
|
+
raise ArgumentError
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
end
|
366
|
+
|
367
|
+
end
|
368
|
+
|
369
|
+
# == SpecTools::Relation
|
370
|
+
# Represents a Spectrum relation
|
371
|
+
class Relation
|
372
|
+
|
373
|
+
extend SpecToolsExtensions
|
374
|
+
include SpecToolsExtensions
|
375
|
+
|
376
|
+
#The relation's name
|
377
|
+
attr_accessor :name
|
378
|
+
#This relation's type
|
379
|
+
attr_accessor :type
|
380
|
+
|
381
|
+
def initialize(name = nil, type = nil)
|
382
|
+
@name = name
|
383
|
+
@type = type
|
384
|
+
end
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
# == SpecTools::Association
|
389
|
+
# Represents a Spectrum Association
|
390
|
+
class Association
|
391
|
+
|
392
|
+
extend SpecToolsExtensions
|
393
|
+
include SpecToolsExtensions
|
394
|
+
|
395
|
+
#The Model on the left hand side of the association
|
396
|
+
attr_accessor :left_model
|
397
|
+
#The Model on the right hand side of the association
|
398
|
+
attr_accessor :right_model
|
399
|
+
#The Relation used for this association
|
400
|
+
attr_accessor :relation
|
401
|
+
|
402
|
+
def initialize(left_model = Model.new, right_model = Model.new, relation = Relation.new)
|
403
|
+
@left_model = left_model
|
404
|
+
@right_model = right_model
|
405
|
+
@relation = relation
|
406
|
+
end
|
407
|
+
|
408
|
+
end
|
409
|
+
|
410
|
+
# == SpecTools::Alarm
|
411
|
+
# Represents a Spectrum alarm
|
412
|
+
class Alarm
|
413
|
+
|
414
|
+
extend SpecToolsExtensions
|
415
|
+
include SpecToolsExtensions
|
416
|
+
|
417
|
+
#The alarm's ID
|
418
|
+
attr_accessor :id
|
419
|
+
#The time the alarm was generated.
|
420
|
+
#This time is local!
|
421
|
+
attr_accessor :time
|
422
|
+
#The alarm's Probable Cause ID
|
423
|
+
attr_accessor :causeid
|
424
|
+
#The Model the alarm was asserted against
|
425
|
+
attr_accessor :model
|
426
|
+
#The alarm's severity
|
427
|
+
attr_accessor :severity
|
428
|
+
#Who the alarm is assigned to
|
429
|
+
attr_accessor :assignment
|
430
|
+
#The alarm's status
|
431
|
+
attr_accessor :status
|
432
|
+
#Set to true if the alarm has been acknowledged
|
433
|
+
attr_accessor :ack
|
434
|
+
#Set to true if the alarm is stale
|
435
|
+
attr_accessor :stale
|
436
|
+
#The Probable Cause text for the alarm
|
437
|
+
attr_accessor :message
|
438
|
+
#The URL for extra information about this alarm
|
439
|
+
attr_accessor :url
|
440
|
+
#The ticket number associated with this alarm
|
441
|
+
attr_accessor :ticket
|
442
|
+
|
443
|
+
def initialize(id = nil, time = nil, causeid = nil, model = Model.new, severity = nil, ack = false, stale = false, assignment = nil, status = nil, message = nil, url = nil, ticket = nil)
|
444
|
+
@id = id
|
445
|
+
@time = time
|
446
|
+
if causeid.nil? || causeid.hex?
|
447
|
+
@causeid = causeid
|
448
|
+
else
|
449
|
+
raise ArgumentError, "causeid is not a hex code."
|
450
|
+
end
|
451
|
+
if model.nil? || model.kind_of?(Model)
|
452
|
+
@model = model
|
453
|
+
else
|
454
|
+
raise ArgumentError, "model is not a Model object"
|
455
|
+
end
|
456
|
+
@severity = severity
|
457
|
+
@ack = ack
|
458
|
+
@stale = stale
|
459
|
+
@assignment = assignment
|
460
|
+
@status = status
|
461
|
+
@message = message
|
462
|
+
@url = url
|
463
|
+
@ticket = ticket
|
464
|
+
end
|
465
|
+
|
466
|
+
#Returns true if the alarm has been acknowledged
|
467
|
+
def ack?
|
468
|
+
@ack
|
469
|
+
end
|
470
|
+
|
471
|
+
#Returns true if the alarm is stale
|
472
|
+
def stale?
|
473
|
+
@stale
|
474
|
+
end
|
475
|
+
|
476
|
+
|
477
|
+
end
|
478
|
+
|
479
|
+
# == SpecTools::Landscape
|
480
|
+
# Represents a Spectrum Landscape
|
481
|
+
class Landscape
|
482
|
+
|
483
|
+
extend SpecToolsExtensions
|
484
|
+
include SpecToolsExtensions
|
485
|
+
|
486
|
+
#This landscape's SpectroSERVER
|
487
|
+
attr_accessor :ss
|
488
|
+
#The landscape's precedence
|
489
|
+
attr_accessor :precedence
|
490
|
+
#The SS port that the landscape is using
|
491
|
+
attr_accessor :port
|
492
|
+
#The landscape's service
|
493
|
+
attr_accessor :service
|
494
|
+
#The landscape's handle
|
495
|
+
attr_accessor :handle
|
496
|
+
|
497
|
+
def initialize(handle = nil, ssname = nil, precedence = nil, port = nil, service = nil )
|
498
|
+
@ss = ssname
|
499
|
+
@precedence = precedence
|
500
|
+
@port = port
|
501
|
+
@service = service
|
502
|
+
if handle.nil? || handle.hex?
|
503
|
+
@handle = handle
|
504
|
+
else
|
505
|
+
raise ArgumentError, "Handle is not a hex code"
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
end
|
510
|
+
|
511
|
+
# == SpecTools::Event
|
512
|
+
# Represents a Spectrum event
|
513
|
+
class Event
|
514
|
+
|
515
|
+
extend SpecToolsExtensions
|
516
|
+
|
517
|
+
#The time of the event
|
518
|
+
#This time is local!
|
519
|
+
attr_accessor :time
|
520
|
+
#The event's type (or Event ID)
|
521
|
+
attr_accessor :type
|
522
|
+
#The Model the event was asserted against
|
523
|
+
attr_accessor :model
|
524
|
+
#The event message
|
525
|
+
attr_accessor :message
|
526
|
+
|
527
|
+
def initialize(time = nil, type = nil, model = Model.new, message = '')
|
528
|
+
@time = time
|
529
|
+
if type.nil? || type.hex?
|
530
|
+
@type = type
|
531
|
+
else
|
532
|
+
raise ArgumentError, "Type is not a hex code."
|
533
|
+
end
|
534
|
+
@model = model
|
535
|
+
@message = message
|
536
|
+
end
|
537
|
+
|
538
|
+
end
|
539
|
+
|
540
|
+
# == SpecTools::Rule
|
541
|
+
# Represents a Spectrum Rule
|
542
|
+
class Rule
|
543
|
+
|
544
|
+
extend SpecToolsExtensions
|
545
|
+
include SpecToolsExtensions
|
546
|
+
|
547
|
+
#The MType on the left hand side of the rule
|
548
|
+
attr_accessor :left_mtype
|
549
|
+
#The MType on the right hand side of the rule
|
550
|
+
attr_accessor :right_mtype
|
551
|
+
|
552
|
+
def initialize(left_mtype = MType.new, right_mtype = MType.new)
|
553
|
+
@left_mtype = left_mtype
|
554
|
+
@right_mtype = right_mtype
|
555
|
+
end
|
556
|
+
|
557
|
+
end
|
558
|
+
|
559
|
+
# == SpecTools::Watch
|
560
|
+
# Represents a SpectroWATCH
|
561
|
+
class Watch
|
562
|
+
|
563
|
+
extend SpecToolsExtensions
|
564
|
+
include SpecToolsExtensions
|
565
|
+
|
566
|
+
#The watch's ID (analogous to an Attr ID)
|
567
|
+
attr_accessor :id
|
568
|
+
#The watch's name
|
569
|
+
attr_accessor :name
|
570
|
+
#The watch's type
|
571
|
+
attr_accessor :type
|
572
|
+
#The watch's status
|
573
|
+
attr_accessor :status
|
574
|
+
|
575
|
+
def initialize(id = nil, name = nil, type = nil, status = nil)
|
576
|
+
@id = id
|
577
|
+
@name = name
|
578
|
+
@type = type
|
579
|
+
@status = status
|
580
|
+
end
|
581
|
+
|
582
|
+
|
583
|
+
end
|
584
|
+
|
585
|
+
end
|
586
|
+
|
587
|
+
|
588
|
+
|