MetricsHub
							MetricsHub Community Connectors 1.0.14
							
						- 
									
									
										Home
									
									
									
- Connector Design Guide
Connector
Connector Directory
The connector directory defines the location of the connector files. As best practice, each connector has its own directory that will contain the connector and its embedded files.
All connector directories are to be placed in the “MetricsHub/connectors” directory for them to be exploited by MetricsHub.
The Connector Object
- Connector Directory
- The Connector Object
- Embedded Files
- SUDO Commands
- Constants
- Format
- Extends
- Format
- YAML Schema
The first part of a connector is a list of information defining its identity, what is the purpose of this connector and what type of platforms and systems it can be used against. The goal of this part is for someone to understand quickly what this connector is about.
Format
connector:
  displayName: # <string>
  platforms: # <string>
  reliesOn: # <string>
  version:  # <string>
  projectVersion: # <string> | default: {esc.d}1.0.14
  information: # <string>
  detection: # <object>
  variables: # <object>
Properties
| Property | Description | 
|---|---|
| displayName | Name of the connector, which can be displayed in the console or reported in the metric’s attribute.( connector.status{name="Dell OpenManage (WMI)"})This preferably refers to the underlying instrumentation layer (e.g.: Dell OpenManage (WMI)). If several connectors are required to cover different aspects of a platform (one connector for the CPU, memory, another for the disks, and a last one for the network cards, for example), the name will specify it with a dash separator. The typical display name therefore looks like: <Instrumentation Layer> [ - Subcomponent ] [ - OS ] [ (protocol) ]. | 
| information | Describes what the connector monitors and how. This ends up in the documentation of the Hardware Connector Library as the description of the connector. Do not hesitate to provide details about the specific requirements for the connector to work properly. | 
| platforms | Typical targeted system. Examples: “ HP ProLiant” or “Any system with SNMP”This property is leveraged to build the Supported Platforms in the documentation. The platform name must be short and simple enough to group several connectors targeting the same type of systems. Several platforms can be specified in a comma-separated list. Connectors that monitor components that may be present in large number of platforms (e.g.: the connector which monitors network cards in all Windows systems) must specify: Any system with [xxx]. | 
| reliesOn | Name of the instrumentation layer this connector leverages. This can also be considered as the technical prerequisites for this connector work, but it can only mention one instrumentation layer. This also ends up in the documentation and in the Supported Platforms[1] and it is important that all connectors have a consistent wording for this property. | 
| projectVersion | The current version of the connector library project. | 
| version | The current version of the connector. | 
| detection | Defines all the information required to perform connector’s detection. See specification in Detection[2]. | 
| variables | The name, description & default value of each connector default variable. If the user does not specify values for these variables, default variables are used instead. | 
Embedded Files
The embedded files will be located in external files under the connector directory.
SUDO Commands
This page defines how to specify in a connector the sudo-able commands.
Format
connector:
  # ...
sudoCommands: # <string-array>
Constants
This page describes how to declare constant in a connector file.
Format
connector:
  # ...
connector:
  # ...
constants: # <object>
  <constantName>: # <string>
Extends
To defines a set of connectors to extends, you need to declare the connectors under the extends sections.
Format
connector:
  # ...
extends: # <string-array>
In the extends array, you need to declare connectors using their file name without the .yaml extension. Either a relative path can be used to point to the extended connector, or an absolute path, using the connectors directory as root.
YAML Schema
connector:
  displayName: # <string>
  platforms: # <string>
  reliesOn: # <string>
  version:  # <string>
  projectVersion: # <string> | default: {esc.d}1.0.14
  information: # <string>
  detection: # <object>
    connectionTypes: # <enum-array> | possible values: [ remote, local ] | default: local
    disableAutoDetection: # <boolean> | default: false
    onLastResort: # <string>
    appliesTo: # <enum-array> | possible values: [ vms, osf1, hp, rs6000, linux, oob, nt, network, storage, solaris, sunos. ]
    supersedes: # <string-array>
    criteria: # <criterion-object-array>
    # Http criterion
    - type: http
      method: # <enum> | possible values: [ get, post, delete, put ]
      path: # <string>
      header: # <string>
      body: # <string>
      expectedResult: # <string>
      errorMessage: # <string>
      resultContent: # <enum> | possible values: [ httpStatus, header, body, all ] | default: body
      authenticationToken: # <string>
      forceSerialization: # <boolean>
    # Ipmi criterion
    - type: ipmi
    # productVersion criterion
    - type: productRequirements
      kmVersion: # <string>
      engineVersion: # <string>
    # Os criterion
    - type: deviceType
      keep: # <enum-array> | possible values: [ vms, osf1, hp, rs6000, linux, oob, nt, network, storage, solaris, sunos ]
      exclude: # <enum-array> | possible values: [ vms, osf1, hp, rs6000, linux, oob, nt, network, storage, solaris, sunos ]
    # CommandLine criterion
    - type: commandLine
      commandLine: # <string>
      errorMessage: # <string>
      expectedResult: # <string>
      executeLocally: # <boolean>
      timeout: # <number>
      forceSerialization: # <boolean>
    # Process criterion
    - type: process
      commandLine: # <string>
    # Service criterion
    - type: service
      name: # <string>
    # SnmpGet criterion
    - type: snmpGet
      oid: # <string>
      expectedResult: # <string>
      forceSerialization: # <boolean>
    # SnmpGetNext criterion
    - type: snmpGetNext
      oid: # <string>
      expectedResult: # <string>
      forceSerialization: # <boolean>
    # Ucs criterion
    - type: ucs
      query: # <string>
      errorMessage: # <string>
      expectedResult: # <string>
      forceSerialization: # <boolean>
    # Wbem criterion
    - type: wbem
      query: # <string>
      namespace: # <string> | default: root/cimv2
      errorMessage: # <string>
      expectedResult: # <string>
      forceSerialization: # <boolean>
    # Wmi criterion
    - type: wmi
      query: # <string>
      namespace: # <string> | default: root/cimv2
      errorMessage: # <string>
      expectedResult: # <string>
      forceSerialization: # <boolean>
    # Sql criterion
    - type: sql
      query: # <string>
      expectedResult: # <string>
      errorMessage: # <string>
  variables:
    <variableName>:
      description: # <string>
      defaultValue: # <string>
sudoCommands: # <string-array>
extends: # <string-array>
metrics:
  <metricName>: # <object>
    unit: # <string>
    description: # <string>
    type: # oneOf [ <enum>, <object> ] | possible values for <enum> [ Gauge, Counter, UpDownCounter ]
      stateSet: # <string-array>
      output: # <enum> | possible values [ Gauge, Counter, UpDownCounter ] | Optional | Default: UpDownCounter
constants: # <object>
  <constantName>: # <string>
beforeAll: # <object>
  <sourceKey>: # <source-object>
monitors:
  <monitorType>: # <object>
    <job>: # <object> | <job> key possible values [ discovery, collect, simple]
      type: # <string> | Only for collect <job> | possible values [ multiInstance, monoInstance ]
      keys: # <string-array> | Only for collect <job> with multiInstance type | Default: [ id ]
      # Sources
      sources: # <source-object>
        # Http Source
        <http-sourceKey>: # <source-object>
          type: http
          method: # <enum> | possible values: [ get, post, delete, put ]
          path: # <string>
          header: # <string>
          body: # <string>
          authenticationToken: # <string>
          resultContent: # <enum> | possible values: [ httpStatus, header, body, all ]
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # Ipmi Source
        <ipmi-sourceKey>: # <source-object>
          type: ipmi
          forceSerialization: # <boolean>
          computes: # <compute-object-array>
        # CommandLine Source
        <commandLine-sourceKey>: # <source-object>
          type: commandLine
          commandLine: # <string>
          timeout: # <number>
          executeLocally: # <boolean>
          exclude: # <string>
          keep: # <string>
          beginAtLineNumber: # <number>
          endAtLineNumber: # <number>
          separators: # <string>
          selectColumns: # <string> | comma separated values
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # Copy Source
        <copy-sourceKey>: # <source-object>
          type: copy
          from: # <string>
          computes: # <compute-object-array>
        # Static Source
        <static-sourceKey>: # <source-object>
          type: static
          value: # <string>
          computes: # <compute-object-array>
        # SnmpGet source
        <snmpGet-sourceKey>: # <source-object>
          type: snmpGet
          oid: # <string>
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        <snmpTable-sourceKey>: # <source-object>
          type: snmpTable
          oid: # <string>
          selectColumns: # <string> | comma separated values
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # TableJoin Source
        <tableJoin-sourceKey>: # <source-object>
          type: tableJoin
          leftTable: # <string>
          rightTable: # <string>
          leftKeyColumn: # <number>
          rightKeyColumn: # <number>
          defaultRightLine: # <string> | comma separated values
          isWbemKey: # <boolean>
          forceSerialization: # <boolean>
          computes: # <compute-object-array>
        # TableUnion Source
        <tableUnion-sourceKey>: # <source-object>
          type: tableUnion
          tables: # <string-array>
          forceSerialization: # <boolean>
          computes: # <compute-object-array>
        # Ucs Source
        <ucs-sourceKey>: # <source-object>
          type: ucs
          queries: # <string-array>
          exclude: # <string>
          keep: # <string>
          selectColumns: # <string>  | comma separated values
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # Wbem Source
        <wbem-sourceKey>: # <source-object>
          type: wbem
          query: # <string>
          namespace: # <string>
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # Wmi Source
        <wmi-sourceKey>: # <source-object>
          type: wmi
          query: # <string>
          namespace: # <string>
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # onOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # SQL Source
        <Sql-sourceKey>: # <source-object>
        <sourceKey>:
          type: sql
          query: # <string>
          forceSerialization: # <boolean>
          executeForEachEntryOf: # <object>
            source: # <string>
            concatMethod: # oneOf [ <enum>, <object> ] | possible values for <enum> : [ list, json_array, json_array_extended ]
              concatStart: # <string>
              concatEnd: # <string>
          computes: # <compute-object-array>
        # InternalDbQuery Source
        <internalDbQuery-sourceKey>: # <source-object>
        <sourceKey>:
          type: internalDbQuery
          tables: # <sqltable-object-array>
          - source: # <string>
            alias: # <string>
            columns: # <sqlcolumn-object-array>
            - name: # <string>
              number: # <integer>
              type: # <string>
          query: # <string>
          computes: # <compute-object-array>
        # Awk Source
        <awk-sourceKey>: # <source-object>
        <sourceKey>:
          type: awk
          script: # <string>
          input: # <string>
          separators: # <string>
          forceSerialization: # <boolean>
          computes: # <compute-object-array>
        # Computes
        <sourceKey>: # <source-object>
          computes: # <compute-object-array>
          - type: add
            column: # <number>
            value:  # <string>
          - type: and
            column: # <number>
            value:  # <string>
          - type: arrayTranslate
            column: # <number>
            translationTable:  # <string>
            arraySeparator: # <string>
            resultSeparator: # <string>
          - type: awk
            script: # <string>
            exclude:  # <string>
            keep: # <string>
            separators: # <string>
            selectColumns: # <string> | comma separated values
          - type: convert
            column: # <number>
            conversion: # <enum> | possible values: [ hex2Dec, array2SimpleStatus ]
          - type: divide
            column: # <number>
            value: # <String>
          - type: duplicateColumn
            column: # <number>
          - type: excludeMatchingLines
            column: # <number>
            regExp: # <string>
            valueList: # <string> | comma separated values
          - type: extract
            column: # <number>
            subColumn: # <number>
            subSeparators: # <string>
          - type: extractPropertyFromWbemPath
            property: # <string>
            column: # <number>
          - type: json2Csv
            entryKey: # <string>
            properties: # <string> | comma separated values
            separator: # <string> | default: ";"
          - type: keepColumns
            columnNumbers: # <string> | comma separated values
          - type: keepMatchingLines
            column: # <number>
            regExp: # <string>
            valueList: # <string> | comma separated values
          - type: prepend
            column: # <number>
            value: # <string>
          - type: multiply
            column: # <number>
            value: # <string>
          - type: perBitTranslation
            column: # <number>
            bitList: # <string> | comma separated values
            translationTable: # <string>
          - type: replace
            column: # <number>
            existingValue: # <string>
            newValue: # <string>
          - type: append
            column: # <number>
            value: # <string>
          - type: subtract
            column: # <number>
            value: # <string>
          - type: substring
            column: # <number>
            start: # <string>
            length: # <string>
          - type: translate
            column: # <number>
            translationTable:  # <string>
          - type: xml2Csv
            recordTag: # <string>
            properties:  # <string> | comma separated values
      mapping:
        source: # <string>
        attributes:
          <key>: # <string>
        conditionalCollection:
          <key>: # <string>
        metrics:
          <key>: # <string>
        legacyTextParameters:
          <key>: # <string>
translations: # <object>
  <table-key>: # <object>
    <key>: # <string>
