---
# registration for Fault\_vMrf\_alarm003
# Constants: the values of domain, eventName, priority, vfstatus
# , version, alarmCondition, eventSeverity, eventSourceType,
# faultFieldsVersion, specificProblem,
# Variables (to be supplied at runtime) include: eventId, lastEpochMicrosec,

# reportingEntityId, reportingEntityName, sequence, sourceId, sourceName,
# startEpochMicrosec

event: {presence: required, action: [ any, any, alarm003,RECO-rebuildVnf ],
        structure: {
          commonEventHeader: {presence: required, structure: {
            domain: {presence: required, value: fault},
            eventName: {presence: required, value: Fault\_vMrf\_alarm003},
            eventId: {presence: required},
            nfNamingCode: {value: mrfx},
            priority: {presence: required, value: Medium},
            reportingEntityId: {presence: required},
            reportingEntityName: {presence: required},
            sequence: {presence: required},
            sourceId: {presence: required},
            sourceName: {presence: required},
            startEpochMicrosec: {presence: required},
            lastEpochMicrosec: {presence: required},
            version: {presence: required, value: 3.0}
          }},
          faultFields: {presence: required, structure: {
            alarmCondition: {presence: required, value: alarm003},
            eventSeverity: {presence: required, value: MAJOR},
            eventSourceType: {presence: required, value: virtualNetworkFunction},
            faultFieldsVersion: {presence: required, value: 2.0},
            specificProblem: {presence: required, value: "Configuration file was
                        corrupt or not present"},
            vfStatus: {presence: required, value: "Requesting Termination"}
          }}
        }}
---
# registration for clearing Fault\_vMrf\_alarm003Cleared
# Constants: the values of domain, eventName, priority,
# , version, alarmCondition, eventSeverity, eventSourceType,
# faultFieldsVersion, specificProblem,
# Variables (to be supplied at runtime) include: eventId,lastEpochMicrosec,
# reportingEntityId, reportingEntityName, sequence, sourceId,
# sourceName, startEpochMicrosec, vfStatus
event: {presence: required, action: [ any, any, alarm003, Clear ], structure: {
  commonEventHeader: {presence: required, structure: {
    domain: {presence: required, value: fault},
    eventName: {presence: required, value: Fault\_vMrf\_alarm003Cleared},
    eventId: {presence: required},
    nfNamingCode: {value: mrfx},
    priority: {presence: required, value: Medium},
    reportingEntityId: {presence: required},
    reportingEntityName: {presence: required},
    sequence: {presence: required},
    sourceId: {presence: required},
    sourceName: {presence: required},
    startEpochMicrosec: {presence: required},
    lastEpochMicrosec: {presence: required},
    version: {presence: required, value: 3.0}
  }},
  faultFields: {presence: required, structure: {
    alarmCondition: {presence: required, value: alarm003},
    eventSeverity: {presence: required, value: NORMAL},
    eventSourceType: {presence: required, value: virtualNetworkFunction},
    faultFieldsVersion: {presence: required, value: 2.0},
    specificProblem: {presence: required, value: "Valid configuration file found"},
    vfStatus: {presence: required, value: "Requesting Termination"}
  }}
}}
---
# registration for Heartbeat_vMRF
# Constants: the values of domain, eventName, priority, version
# Variables (to be supplied at runtime) include: eventId, lastEpochMicrosec,
# reportingEntityId, reportingEntityName, sequence, sourceId, sourceName,
# startEpochMicrosec
event: {presence: required, heartbeatAction: [3, vnfDown,RECO-rebuildVnf],
        structure: {
          commonEventHeader: {presence: required, structure: {
            domain: {presence: required, value: heartbeat},
            eventName: {presence: required, value: Heartbeat\_vMrf},
            eventId: {presence: required},
            nfNamingCode: {value: mrfx},
            priority: {presence: required, value: Normal},
            reportingEntityId: {presence: required},
            reportingEntityName: {presence: required},
            sequence: {presence: required},
            sourceId: {presence: required},
            sourceName: {presence: required},
            startEpochMicrosec: {presence: required},
            lastEpochMicrosec: {presence: required},
            version: {presence: required, value: 3.0}
          }},
          heartbeatFields: {presence: optional, structure:{
            heartbeatFieldsVersion: {presence: required, value: 1.0},
            heartbeatInterval: {presence: required, range: [ 15, 300 ], default: 60 }
          }}
        }}
---
# registration for Mfvs\_vMRF
# Constants: the values of domain, eventName, priority, version,
# measurementFieldsVersion, additionalMeasurements.namedArrayOfFields.name,
# Variables (to be supplied at runtime) include: eventId, reportingEntityName, sequence,
# sourceName, start/lastEpochMicrosec, measurementInterval,
# concurrentSessions, requestRate, numberOfMediaPortsInUse,
# cpuUsageArray.cpuUsage,cpuUsage.cpuIdentifier, cpuUsage.percentUsage,
# additionalMeasurements.namedArrayOfFields.arrayOfFields,
# vNicPerformance.receivedOctetsAccumulated,
# vNicPerformance.transmittedOctetsAccumulated,
# vNicPerformance.receivedTotalPacketsAccumulated,
# vNicPerformance.transmittedTotalPacketsAccumulated,
# vNicPerformance.vNicIdentifier, vNicPerformance.receivedOctetsDelta,
# vNicPerformance.receivedTotalPacketsDelta,
# vNicPerformance.transmittedOctetsDelta,
# vNicPerformance.transmittedTotalPacketsDelta,
# vNicPerformance.valuesAreSuspect, memoryUsageArray.memoryUsage,
# memoryUsage.memoryConfigured, memoryUsage.vmIdentifier,
# memoryUsage.memoryUsed, memoryUsage.memoryFree
event: {presence: required, structure: {
  commonEventHeader: {presence: required, structure: {
    domain: {presence: required, value: measurementsForVfScaling},
    eventName: {presence: required, value: Mfvs\_vMrf},
    eventId: {presence: required},
    nfNamingCode: {value: mrfx},
    priority: {presence: required, value: Normal},
    reportingEntityId: {presence: required},
    reportingEntityName: {presence: required},
    sequence: {presence: required},
    sourceId: {presence: required},
    sourceName: {presence: required},
    startEpochMicrosec: {presence: required},
    lastEpochMicrosec: {presence: required},
    version: {presence: required, value: 3.0}
  }},
  measurementsForVfScalingFields: {presence: required, structure: {
    measurementFieldsVersion: {presence: required, value: 2.0},
    measurementInterval: {presence: required, range: [ 60, 3600 ], default:300},
    concurrentSessions: {presence: required, range: [ 0, 100000 ]},
    requestRate: {presence: required, range: [ 0, 100000 ]},
    numberOfMediaPortsInUse: {presence: required, range: [ 0, 100000 ]},
    cpuUsageArray: {presence: required, array: [
      cpuUsage: {presence: required, structure: {
        cpuIdentifier: {presence: required},
        percentUsage: {presence: required, range: [ 0, 100 ],
                       action: [80, up, CpuUsageHigh, RECO-scaleOut],
                       action: [10, down, CpuUsageLow, RECO-scaleIn]}
      }}
    ]},
    memoryUsageArray: {presence: required, array: [
      memoryUsage: {presence: required, structure: {
        memoryConfigured: {presence: required, value: 33554432},
        memoryFree: {presence: required, range: [ 0, 33554432 ],
                     action: [100, down, FreeMemLow, RECO-scaleOut],
                     action: [30198989, up, FreeMemHigh, RECO-scaleIn]},
        memoryUsed: {presence: required, range: [ 0, 33554432 ]},
        vmIdentifier: {presence: required}
      }}
    ]},
    additionalMeasurements: {presence: required, array: [
      namedArrayOfFields: {presence: required, structure: {
        name: {presence: required, value: licenseUsage},
        arrayOfFields: {presence: required, array: [
          field: {presence: required, structure: {
            name: {presence: required, value: G711AudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: G729AudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: G722AudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: AMRAudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: AMRWBAudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: OpusAudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: H263VideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: H264NonHCVideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: H264HCVideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: MPEG4VideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: VP8NonHCVideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: VP8HCVideoPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: PLC},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: AEC},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: NR},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: NG},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: NLD},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: G711FaxPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: T38FaxPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: RFactor},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: T140TextPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: EVSAudioPort},
            value: {presence: required, range: [ 0, 100000 ],
                    units: numberOfPorts }
          }}
        ]}
      }},
      namedArrayOfFields: {presence: required, structure: {
        name: {presence: required, value: mediaCoreUtilization},
        arrayOfFields: {presence: required, array: [
          field: {presence: required, structure: {
            name: {presence: required, value: actualAvgAudio},
            value: {presence: required, range: [ 0, 255 ],
                    action: [80, up, AudioCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, AudioCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelAvgAudio},
            value: {presence: required, range: [ 0, 100 ],
                    action: [80, up, AudioCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, AudioCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: actualMaxAudio},
            value: {presence: required, range: [ 0, 255 ]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelMaxAudio},
            value: {presence: required, range: [ 0, 100 ]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: actualAvgVideo},
            value: {presence: required, range: [ 0, 255 ],
                    action: [80, up, VideoCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, VideoCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelAvgVideo},
            value: {presence: required, range: [ 0, 100 ],
                    action: [80, up, VideoCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, VideoCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: actualMaxVideo},
            value: {presence: required, range: [ 0, 255 ]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelMaxVideo},
            value: {presence: required, range: [ 0, 100 ]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: actualAvgHcVideo},
            value: {presence: required, range: [ 0, 255 ],
                    action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelAvgHcVideo},
            value: {presence: required, range: [ 0, 100 ],
                    action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut],
                    action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: actualMaxHcVideo},
            value: {presence: required, range: [ 0, 255 ]}
          }},
          field: {presence: required, structure: {
            name: {presence: required, value: modelMaxHcVideo},
            value: {presence: required, range: [ 0, 100 ]}
          }}
        ]}
      }}
    ]},
    vNicPerformanceArray: {presence: required, array: [
      vNicPerformance: {presence: required, structure: {
        receivedOctetsAccumulated: {presence: required,
                                    range: [ 0, 18446744073709551615 ]},
        receivedTotalPacketsAccumulated: {presence: required,
                                          range: [ 0, 18446744073709551615 ]},
        receivedOctetsDelta: {presence: required},
        range: [ 0, 18446744073709551615 ],
        receivedTotalPacketsDelta: {presence: required,
                                    range: [ 0, 18446744073709551615 ]},
        transmittedOctetsDelta: {presence: required,
                                 range: [ 0, 18446744073709551615 ]},
        transmittedOctetsAccumulated: {presence: required,
                                       range: [ 0, 18446744073709551615 ]},
        transmittedTotalPacketsAccumulated: {presence: required,
                                             range: [ 0, 18446744073709551615 ]},
        transmittedTotalPacketsDelta: {presence: required,
                                       range: [ 0, 18446744073709551615 ]},
        valuesAreSuspect: {presence: required, value: [ true, false ]},
        vNicIdentifier: {presence: required}
      }}
    ]}
  }}
}}
---
# registration for Syslog\_vMRF
# Constants: the values of domain, eventName, priority, lastEpochMicrosec, version,
# syslogFields.syslogFieldsVersion, syslogFields.syslogTag
# Variables include: eventId, lastEpochMicrosec, reportingEntityId, reportingEntityName,
# sequence, sourceId, sourceName, startEpochMicrosec,
# syslogFields.eventSourceHost, syslogFields.eventSourceType,
# syslogFields.syslogFacility, syslogFields.syslogMsg
event: {presence: required, structure: {
  commonEventHeader: {presence: required, structure: {
    domain: {presence: required, value: syslog},
    eventName: {presence: required, value: Syslog\_vMrf},
    eventId: {presence: required},
    nfNamingCode: {value: mrfx},
    priority: {presence: required, value: Normal},
    reportingEntityId: {presence: required},
    reportingEntityName: {presence: required},
    sequence: {presence: required},
    sourceId: {presence: required},
    sourceName: {presence: required},
    startEpochMicrosec: {presence: required},
    lastEpochMicrosec: {presence: required},
    version: {presence: required, value: 3.0},
  }},
  syslogFields: {presence: required, structure: {
    eventSourceHost: {presence: required},
    eventSourceType: {presence: required, value: virtualNetworkFunction},
    syslogFacility: {presence: required, range: [16, 23]},
    syslogSev: {presence: required, value: [ 0, 1, 2, 3, 4 ]},
    syslogFieldsVersion: {presence: required, value: 3.0},
    syslogMsg: {presence: required},
    syslogTag: {presence: required, value: vMRF},
  }}
}}
---
#Rules
Rules: [
  rule: {
    trigger: CpuUsageHigh \|\| FreeMemLow \|\| AudioCoreUsageHigh \|\|
      VideoCoreUsageHigh \|\| HcVideoCoreUsageHigh,
    microservices: [scaleOut]
  },
  rule: {
    trigger: CpuUsageLow && FreeMemHigh && AudioCoreUsageLow &&
      VideoCoreUsageLow && HcVideoCoreUsageLow,
    microservices: [scaleIn]
  }
]