WatchGuard - Cluster status and active sessions

Greetings,
I would propose some new sensors and counters for Watchguard.

wgSystemCurrActiveConns → Counts active sessions on monitored device
wgClusterEnabled → Give information about device cluster status (single node/FireCluster)
wgFirstMemberRole → First Cluster Member role (useful for failover alerting)
wgSecondMemberRole → Second Cluster Member role (useful for failover alerting)
wgFirstMemberWeightAvg → Weight Average Index for First Member - Gives information about general device health. Anything below 100 means “issues”
wgSecondMemberWeightAvg → Weight Average Index for Second Member - Gives information about general device health. Anything below 100 means “issues”

I just tried to implement on our side, and i found that the following changes are needed:

\opt\librenms\includes\discovery\definitions\fireware.yaml → Add the new sensor and MIB information

mib: WATCHGUARD-CLUSTER-STATUS-MIB:WATCHGUARD-SYSTEM-STATISTICS-MIB
modules:
  os:
    sysDescr_regex: '/(?<hardware>.*)/'
  sensors:
    count:
      data:
        - oid: wgSystemCurrActiveConns
          descr: 'Active Sessions'
    state:
      data:
        -
          oid: wgClusterEnabled
          descr: 'Cluster Status'
          states:
            - { value: 0, descr: Single Box, graph: 0, generic: 0 }
            - { value: 1, descr: FireCluster, graph: 0, generic: 0 }
        -
          oid: wgFirstMemberRole
          descr: 'First Member Role'
          states:
            - { value: 0, descr: Disabled, graph: 0, generic: 0 }
            - { value: 1, descr: Worker, graph: 0, generic: 0 }
            - { value: 2, descr: Backup, graph: 0, generic: 0 }
            - { value: 3, descr: Master, graph: 0, generic: 0 }
            - { value: 4, descr: Idle, graph: 0, generic: 0 }
            - { value: 5, descr: Standby, graph: 0, generic: 0 }
        -
          oid: wgSecondMemberRole
          descr: 'Second Member Role'
          states:
            - { value: 0, descr: Disabled, graph: 0, generic: 0 }
            - { value: 1, descr: Worker, graph: 0, generic: 0 }
            - { value: 2, descr: Backup, graph: 0, generic: 0 }
            - { value: 3, descr: Master, graph: 0, generic: 0 }
            - { value: 4, descr: Idle, graph: 0, generic: 0 }
            - { value: 5, descr: Standby, graph: 0, generic: 0 }
        -
          oid: wgSecondMemberWeightAvg
          descr: 'Second Member WAI'
          low_limit: 99
        -
          oid: wgFirstMemberWeightAvg
          descr: 'First Member WAI'
          low_limit: 99

\opt\librenms\includes\discovery\fireware.yaml → Add the mib_dir path

os: fireware
text: 'Watchguard Fireware'
mib_dir: watchguard
type: firewall
over:
    - { graph: device_bits, text: Traffic }
    - { graph: device_processor, text: 'CPU Usage' }
icon: watchguard
group: watchguard
discovery:
    -
        sysObjectID:
            - .1.3.6.1.4.1.3097.1.4
            - .1.3.6.1.4.1.3097.1.5

\opt\librenms\mibs\watchguard\WATCHGUARD-CLUSTER-STATUS-MIB → add the new MIB from WatchGuard. There is a bug, first row shows the wrong name, must be changed accordingly.

WATCHGUARD-CLUSTER-STATUS-MIB DEFINITIONS ::= BEGIN

    IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE, 
        OBJECT-IDENTITY, enterprises, 
        IpAddress, TimeTicks       FROM SNMPv2-SMI
        watchguard                 FROM WATCHGUARD-SMI;
        
    wgInfoModule MODULE-IDENTITY
        LAST-UPDATED  "200701251200Z"
        ORGANIZATION  "WatchGuard Technologies, Inc."
        CONTACT-INFO
                   "  WatchGuard Technologies, Inc.

                      505 Fifth Avenue South
                      Suite 500
                      Seattle, WA 98104
                      United States

                      +1.206.613.6600 " 


        DESCRIPTION
            "The MIB module describes various system statistics information
            of WatchGuard system."


        REVISION      "200701251200Z"
        DESCRIPTION
            "Initial revision."
        ::= { watchguard 6 }


    wgClusterStatusMIB OBJECT-IDENTITY
        STATUS      current
        DESCRIPTION
            "This is cluster status information."
    ::= { wgInfoModule 6 }

    wgClusterEnabled OBJECT-TYPE
        SYNTAX      INTEGER {
                        disabled(0),
                        enabled(1)
                    }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "It is cluster or single box."
        ::= { wgClusterStatusMIB 1 }

    wgFirstMemberId OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE(0..256))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member id."
        ::= { wgClusterStatusMIB 2 }
            
    wgFirstMemberRole OBJECT-TYPE
        SYNTAX      INTEGER {
                        disabled(0),
                        worker(1),
                        backup(2),
                        master(3),
                        idle(4),
                        standby(5)
                    }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member role."
        ::= { wgClusterStatusMIB 3 }
    
    wgFirstMemberSystemHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member system health value."
        ::= { wgClusterStatusMIB 4 }
    
    wgFirstMemberHardwareHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member hardware health value."
        ::= { wgClusterStatusMIB 5 }
  
    wgFirstMemberMonitorPortHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member monitored ports health value."
        ::= { wgClusterStatusMIB 6 }
  
    wgFirstMemberWeightAvg OBJECT-TYPE
        SYNTAX      INTEGER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "First member weight avg value."
        ::= { wgClusterStatusMIB 7 }
 
    wgSecondMemberId OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE(0..256))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member id."
        ::= { wgClusterStatusMIB 8 }
            
    wgSecondMemberRole OBJECT-TYPE
        SYNTAX      INTEGER {
                        disabled(0),
                        worker(1),
                        backup(2),
                        master(3),
                        idle(4),
                        standby(5)
                    }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member role."
        ::= { wgClusterStatusMIB 9 }
    
    wgSecondMemberSystemHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member system health value."
        ::= { wgClusterStatusMIB 10 }
    
    wgSecondMemberHardwareHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member hardware health value."
        ::= { wgClusterStatusMIB 11 }
  
    wgSecondMemberMonitorPortHealth OBJECT-TYPE
        SYNTAX      INTEGER 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member monitored ports health value."
        ::= { wgClusterStatusMIB 12 }
  
    wgSecondMemberWeightAvg OBJECT-TYPE
        SYNTAX      INTEGER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Second member weight avg value."
        ::= { wgClusterStatusMIB 13 }
END

Can you do this as a pull request? We also need test data as well: Test Units - LibreNMS Docs