Mapping snmp tables

From the ciena MIB I want to map the optical power levels. I have the following MIB queries (truncated):

$ snmpwalk -v2c -c *** xyz CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr| grep 16777730
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.rxMinimum = STRING: rxMinimum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.rxMaximum = STRING: rxMaximum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.rxAverage = STRING: rxAverage
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.txMinimum = STRING: txMinimum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.txMaximum = STRING: txMaximum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.txAverage = STRING: txAverage
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.chanRxMinimum = STRING: chanRxMinimum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.chanRxMaximum = STRING: chanRxMaximum
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr.16777730.1.chanRxAverage = STRING: chanRxAverage
$ snmpwalk -v2c -c *** xyz CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue|grep 16777730
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.rxMinimum = STRING: -40.000
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.rxMaximum = STRING: -8.584
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.rxAverage = STRING: -8.738
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.txMinimum = STRING: -40.000
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.txMaximum = STRING: -0.955
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.txAverage = STRING: -1.002
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.chanRxMinimum = STRING: -40.000
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.chanRxMaximum = STRING: -4.442
CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue.16777730.1.chanRxAverage = STRING: -9.064
$ snmpwalk -v2c -c *** xyz IF-MIB::ifName|grep 16777730
IF-MIB::ifName.16777730 = STRING: PTP-1/1

From the example above 16777730 is the interface index and .1 is the channel index (could be .1, .2 etc). The new interface for the events would be something like PTP-1/1.1

I have this definition which does not work as the index details for tables are expected at the end of the MIB path. Is there a way to make this work?

  [[inputs.snmp.table]]
    name = "power"
    inherit_tags = [ "source" ]
    oid = "CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue"
    index_as_tag = true

    [[inputs.snmp.table.field]]
      name = "ifName"
      oid = "IF-MIB::ifName"
      is_tag = true
      secondary_index_table = true    # enables joining

I managed to get what I require with the following and some starlark to jiggle tags around.:

[[inputs.snmp.table]]
name = “ciena_transceiver”
index_as_tag = true # we need the index to get the channel

[[inputs.snmp.table.field]]
  name = "pmOpticalPowerUntimedMonValue"
  oid = "CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonValue"
  conversion = "float"
  name_override = "pmOpticalPowerUntimedMonTypeDescr"

[[inputs.snmp.table.field]]
  name = "pmOpticalPowerUntimedMonTypeDescr"
  oid = "CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedMonTypeDescr"
  is_tag = true

[[inputs.snmp.table.field]]
  name = "name"
  oid = "CIENA-WS-PLATFORM-PM-MIB::pmOpticalPowerUntimedIfIndexDescr"
  is_tag = true

@richarde Thank you for sharing your solution. We really appreciate it!