Add SB Event API specification
[doctor.git] / docs / requirements / 05-implementation.rst
index 3ae512f..297f34a 100644 (file)
@@ -313,9 +313,9 @@ working group.
 
 Simple information elements:
 
-* SubscriptionID: identifies a subscription to receive fault or maintenance
+* SubscriptionID (Identifier): identifies a subscription to receive fault or maintenance
   notifications.
-* NotificationID: identifies a fault or maintenance notification.
+* NotificationID (Identifier): identifies a fault or maintenance notification.
 * VirtualResourceID (Identifier): identifies a virtual resource affected by a
   fault or a maintenance action of the underlying physical resource.
 * PhysicalResourceID (Identifier): identifies a physical resource affected by a
@@ -342,7 +342,7 @@ Simple information elements:
 * EventTime (Datetime): Time when the fault was observed.
 * EventStartTime and EventEndTime (Datetime): Datetime range that can be used in
   a FaultQueryFilter to narrow down the faults to be queried.
-* ProbableCause: information about the probable cause of the fault.
+* ProbableCause (String): information about the probable cause of the fault.
 * CorrelatedFaultID (Integer): list of other faults correlated to this fault.
 * isRootCause (Boolean): Parameter indicating if this fault is the root for
   other correlated faults. If TRUE, then the faults listed in the parameter
@@ -356,7 +356,7 @@ Simple information elements:
 * ZoneID (Identifier): Identifier of the resource zone. A resource zone is the
   logical separation of physical and software resources in an NFVI deployment
   for physical isolation, redundancy, or administrative designation.
-* Metadata (Key-Value-Pairs): provides additional information of a physical
+* Metadata (Key-value pair): provides additional information of a physical
   resource in maintenance/error state.
 
 Complex information elements (see also UML diagrams in :numref:`figure13`
@@ -374,10 +374,10 @@ and :numref:`figure14`):
   particular describing the information elements used for alarm notifications.
 
   - FaultID [1] (Identifier)
-  - FaultType [1]
+  - FaultType [1] (String)
   - Severity [1] (Integer)
   - EventTime [1] (Datetime)
-  - ProbableCause [1]
+  - ProbableCause [1] (String)
   - CorrelatedFaultID [0..*] (Identifier)
   - FaultDetails [0..*] (Key-value pair)
 
@@ -406,6 +406,7 @@ and :numref:`figure14`):
   - PhysicalResourceID [1] (Identifier)
   - PhysicalResourceState [1] (String): mandates the new state of the physical
     resource.
+  - Metadata [0..*] (Key-value pair)
 
 * PhysicalResourceInfoClass:
 
@@ -414,6 +415,7 @@ and :numref:`figure14`):
   - FirmwareVersion [0..1] (String)
   - HypervisorVersion [0..1] (String)
   - ZoneID [0..1] (Identifier)
+  - Metadata [0..*] (Key-value pair)
 
 * StateQueryFilterClass: narrows down a StateQueryRequest, for example it limits
   the query to certain physical resources, a certain zone, or a given resource
@@ -642,6 +644,95 @@ Parameters:
   resources. For each resource, information about the current state, the
   firmware version, etc. is provided.
 
+
+Detailed southbound interface specification
+-------------------------------------------
+
+This section is specifying the southbound interfaces for fault management
+between the Monitors and the Inspector.
+Although southbound interfaces should be flexible to handle various events from
+different types of Monitors, we define unified event API in order to improve
+interoperability between the Monitors and the Inspector.
+This is not limiting implementation of Monitor and Inspector as these could be
+extended in order to support failures from intelligent inspection like prediction.
+
+Note: The interface definition will be aligned with current work in ETSI NFV IFA
+working group.
+
+Fault event interface
+^^^^^^^^^^^^^^^^^^^^^
+
+This interface allows the Monitors to notify the Inspector about an event which
+was captured by the Monitor and may effect resources managed in the VIM.
+
+EventNotification
+_________________
+
+
+Event notification including fault description.
+The entity of this notification is event, and not fault or error specifically.
+This allows us to use generic event format or framework build out of Doctor project.
+The parameters below shall be mandatory, but keys in 'Details' can be optional.
+
+Parameters:
+
+* Time [1]: Datetime when the fault was observed in the Monitor.
+* Type [1]: Type of event that will be used to process correlation in Inspector.
+* Details [0..1]: Details containing additional information with Key-value pair style.
+  Keys shall be defined depending on the Type of the event.
+
+E.g.:
+
+.. code-block:: bash
+
+    {
+        'event': {
+            'time': '2016-04-12T08:00:00',
+            'type': 'compute.host.down',
+            'details': {
+                'hostname': 'compute-1',
+                'source': 'sample_monitor',
+                'cause': 'link-down',
+                'severity': 'critical',
+                'status': 'down',
+                'monitor_id': 'monitor-1',
+                'monitor_event_id': '123',
+            }
+        }
+    }
+
+Optional parameters in 'Details':
+
+* Hostname: the hostname on which the event occurred.
+* Source: the display name of reporter of this event. This is not limited to monitor, other entity can be specified such as 'KVM'.
+* Cause: description of the cause of this event which could be different from the type of this event.
+* Severity: the severity of this event set by the monitor.
+* Status: the status of target object in which error occurred.
+* MonitorID: the ID of the monitor sending this event.
+* MonitorEventID: the ID of the event in the monitor. This can be used by operator while tracking the monitor log.
+* RelatedTo: the array of IDs which related to this event.
+
+Also, we can have bulk API to receive multiple events in a single HTTP POST
+message by using the 'events' wrapper as follows:
+
+.. code-block:: bash
+
+    {
+        'events': [
+            'event': {
+                'time': '2016-04-12T08:00:00',
+                'type': 'compute.host.down',
+                'details': {},
+            },
+            'event': {
+                'time': '2016-04-12T08:00:00',
+                'type': 'compute.host.nic.error',
+                'details': {},
+            }
+        ]
+    }
+
+
 Blueprints
 ----------
 
@@ -836,6 +927,3 @@ as Doctor will be doing. Also this BP might need enhancement to change server
 and service states correctly.
 
 .. [*] https://blueprints.launchpad.net/nova/+spec/pacemaker-servicegroup-driver
-
-..
- vim: set tabstop=4 expandtab textwidth=80: