Resources essentially abstract NMIS model bits (subsections?) into things (resources) that have common names.
Node -> Resource Types -> Resource Keys -> Resource
Resources are all indexed, if there is only one of them then there is only 1 index available. Resource keys are the indexes. Resource types can be asked for the available keys, then, can be asked for a resource using one of the keys provided.
Example Resource Types:
New resource types can be created by simply adding a new section to a resource file.
Resource section layout example:
Note: the resource MUST contain a property named "resource_enabled", which tells the system if this resource is enabled or disabled. If this already exists as a property of the thing being resource-ified, that will do, if not, create a virtual property which defines it.
resources => { # this key defines the resource type 'cpu' => { # the name that is displayed for this resource 'resource_name' => 'CPU', # resources can inherit, and then override, use import to specify the file/section to import from 'import' => 'Resources-Common/cpu', # is the NMIS model section we point at indexed? 'indexed' => 'true', # which NMIS model section to look in (other egs: 'system','interface','storage', etc. these are on the base level) # also points into the -node file, tells it which section in the node file to use 'section' => 'device', # list of properties which are appended to create the index for this, they are joined together with ":" # and used as the resource name # not required if indexed is false 'indexed_name' => ['index','hrDeviceDescr'], # graph_type, this is passed into getDBName to resolve the db path 'rrd_resource' => 'hrsmpcpu', # array of graphs that relate to this resource 'graphs' => ['hrsmpcpu'], # not listed: properties # properties are gleaned from the -node file, anything available in the section that relates to this # resource are available # list of virtual properties, see "virtual options", can access any properties,virtual properties 'virtual_properties' => [ { name => 'resource_enabled', operation => 'define', value => '1', }, { name => 'friendly_name', operation => 'calculation', value => '"CPU $index"', } ], # list of fields available from the RRD 'fields' => [ { name =>'hrCpuLoad', display_suffix => '%' } ], # list of virtual fields, see "virtual options", can access any properties,virtual properties,fields or other virtual fields # NOTE: be sure not to create circular dependencies (x uses y for calculation, y uses x for calculation) 'virtual_fields' => [ { name => 'cpuLoad', operation => 'define', value => '$hrCpuLoad', display_suffix => '%' } ], # this is for opTrend, can be ignored # tells optrend which fields to run seds on (virtual or normal) 'seds_fields' => ['cpuLoad'], # also for opTrend, can be ignored # tells optrend which fields to run thresholding on, and which type to use 'threshold_fields' => { 'cpuLoad' => 'ev', } } } |
Virtual options are run through a parser, they are resolved on access so none of the data is actually parsed/calculated until the data is required.
{ name => "name of the thing" operation => type, explained below value => depends on type display_suffix => when shown on screen, what suffix to use, eg bytes, %, whoosits/whenzees } |
There are 3 operation types of for virtual field/properties: