VES: add new tag to strip extra dashes 41/46041/1
authorMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Wed, 18 Oct 2017 15:18:07 +0000 (16:18 +0100)
committerMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Wed, 18 Oct 2017 15:18:07 +0000 (16:18 +0100)
The `!StripExtraDash` tag can be used in YAML configuration
file to strip extra dashes in the YAML filed value. This may
happen if some of the collectd plugin field (plugin_instance,
type_instace etc.) is set to empty value but the field is
specified in the YAML configuration file. For instance:

"{vl.plugin_instance}-{vl.type_instance}"

The result fo the example above can be string consisting
extra dashes if `type_instace` field is not set by a collectd
plugin:

"load-"

Change-Id: I5cf7b19902acdfb0b4a93f3bf0c8b8e05cff2e97
Signed-off-by: Mytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
3rd_party/collectd-ves-app/ves_app/guest.yaml
3rd_party/collectd-ves-app/ves_app/host.yaml
3rd_party/collectd-ves-app/ves_app/normalizer.py

index 7bb7135..c26bd08 100644 (file)
@@ -40,13 +40,13 @@ Host Measurements: !Measurements
                 - plugin
                 - plugin_instance
             - ITEM-DESC:
-                name: "{vl.plugin}-{vl.plugin_instance}"
+                name: !StripExtraDash "{vl.plugin}-{vl.plugin_instance}"
                 arrayOfFields: !ArrayItem
                   - SELECT:
                       plugin: "{vl.plugin}"
                       plugin_instance: "{vl.plugin_instance}"
                   - ITEM-DESC:
-                      name: "{vl.type}-{vl.type_instance}-{vl.ds_name}"
+                      name: !StripExtraDash "{vl.type}-{vl.type_instance}-{vl.ds_name}"
                       value: "{vl.value}"
           measurementInterval: !Number "{vl.interval}"
           memoryUsageArray: !ArrayItem
@@ -265,14 +265,14 @@ Guest Events: !Events
           lastEpochMicrosec: !Number "{n.time}"
           startEpochMicrosec: !Number "{n.time}"
         faultFields:
-          alarmInterfaceA: "{n.plugin}-{n.plugin_instance}"
+          alarmInterfaceA: !StripExtraDash "{n.plugin}-{n.plugin_instance}"
           alarmCondition: "{n.message}"
           eventSeverity: !MapValue
             VALUE: "{n.severity}"
             TO: *collectdSeverityMapping
           eventSourceType: guest
           faultFieldsVersion: 1.1
-          specificProblem: "{n.plugin_instance}-{n.type_instance}"
+          specificProblem: !StripExtraDash "{n.plugin_instance}-{n.type_instance}"
           vfStatus: Active
   - CONDITION:
       plugin: "/^(?!virt).*$/"
index a91574c..0aa53f4 100644 (file)
@@ -39,7 +39,7 @@ Host Measurements: !Measurements
                 plugin_instance: "{vl.plugin_instance}"
                 type: "/^(?!memory|virt_vcpu|disk_octets|disk_ops|if_packets|if_errors|if_octets|if_dropped).*$/"
             - ITEM-DESC:
-                name: "{vl.type}-{vl.type_instance}-{vl.ds_name}"
+                name: !StripExtraDash "{vl.type}-{vl.type_instance}-{vl.ds_name}"
                 value: "{vl.value}"
           additionalMeasurements: !ArrayItem
             - SELECT:
@@ -48,13 +48,13 @@ Host Measurements: !Measurements
                 - plugin
                 - plugin_instance
             - ITEM-DESC:
-                name: "{vl.plugin}-{vl.plugin_instance}"
+                name: !StripExtraDash "{vl.plugin}-{vl.plugin_instance}"
                 arrayOfFields: !ArrayItem
                   - SELECT:
                       plugin: "{vl.plugin}"
                       plugin_instance: "{vl.plugin_instance}"
                   - ITEM-DESC:
-                      name: "{vl.type}-{vl.type_instance}-{vl.ds_name}"
+                      name: !StripExtraDash "{vl.type}-{vl.type_instance}-{vl.ds_name}"
                       value: "{vl.value}"
           measurementInterval: !Number "{vl.interval}"
           memoryUsageArray: !ArrayItem
@@ -188,14 +188,14 @@ Virt Events: !Events
           lastEpochMicrosec: !Number "{n.time}"
           startEpochMicrosec: !Number "{n.time}"
         faultFields: &faultFields
-          alarmInterfaceA: "{n.plugin}-{n.plugin_instance}"
+          alarmInterfaceA: !StripExtraDash "{n.plugin}-{n.plugin_instance}"
           alarmCondition: "{n.message}"
           eventSeverity: !MapValue
             VALUE: "{n.severity}"
             TO: *collectdSeverityMapping
           eventSourceType: hypervisor
           faultFieldsVersion: 1.1
-          specificProblem: "{n.plugin_instance}-{n.type_instance}"
+          specificProblem: !StripExtraDash "{n.plugin_instance}-{n.type_instance}"
           vfStatus: Active
   - CONDITION:
       plugin: virt
index ddaad61..84de5e3 100644 (file)
@@ -288,7 +288,7 @@ class Item(yaml.YAMLObject):
     def format_node(cls, mapping, metric):
         if mapping.tag in [
                 'tag:yaml.org,2002:str', Bytes2Kibibytes.yaml_tag,
-                Number.yaml_tag]:
+                Number.yaml_tag, StripExtraDash.yaml_tag]:
             return yaml.ScalarNode(mapping.tag, mapping.value.format(**metric))
         elif mapping.tag == 'tag:yaml.org,2002:map':
             values = []
@@ -459,6 +459,15 @@ class Number(yaml.YAMLObject):
             return float(node.value)
 
 
+class StripExtraDash(yaml.YAMLObject):
+    """Class to process StripExtraDash tag"""
+    yaml_tag = u'!StripExtraDash'
+
+    @classmethod
+    def from_yaml(cls, loader, node):
+        return '-'.join([ x for x in node.value.split('-') if len(x) > 0])
+
+
 class MapValue(yaml.YAMLObject):
     """Class to process MapValue tag"""
     yaml_tag = u'!MapValue'