..
       # Copyright 2017 Intel Research and Development Ireland Limited
       # *************************************************************
       # This file is part of OSM Monitoring module
       # All Rights Reserved to Intel Corporation
       #
       # Licensed under the Apache License, Version 2.0 (the "License"); you may
       # not use this file except in compliance with the License. You may obtain
       # a copy of the License at
       #
       #         http://www.apache.org/licenses/LICENSE-2.0
       #
       # Unless required by applicable law or agreed to in writing, software
       # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
       # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
       # License for the specific language governing permissions and limitations
       # under the License.
       #
       # For those usages not covered by the Apache License, Version 2.0 please
       # contact: prithiv.mohan@intel.com or adrian.hoban@intel.com

OSM MON Module
****************

MON is a monitoring module for OSM. This module leverages the monitoring
tool of the supported VIMs through MON's native plugin to send and receive
metrics and alarms for a VNF.

Components
**********

MON module has the following components:

 - MON Core, which includes Message Bus and Models
 - Plugin drivers for various VIMs

The MON module communication is classified as

 - External to MON(requests to MON from SO)
 - Internal to MON(responses to MON from plugins)

Supported Plugins
******************

Supported VIMs are OpenStack, VMWare, AWS for now. MON can send/receive metrics
and alarms from the following plugins in this release.

 - Gnocchi, Aodh (OpenStack)
 - vROps (VMWare)
 - CloudWatch (AWS)

Developers
**********

  - Prithiv Mohan, Intel Research and Development Ltd, Ireland
  - Helena McGough, Intel Research and Development Ltd, Ireland
  - Sachin Bhangare, VMWare, India
  - Wajeeha Hamid, XFlow Research, Pakistan

Maintainers
***********

 - Adrian Hoban, Intel Research and Development Ltd, Ireland

Contributions
*************

For information on how to contribute to OSM MON module, please get in touch with
the developer or the maintainer.

Any new code must follow the development guidelines detailed in the Dev Guidelines
in the OSM Wiki and pass all tests.

Dev Guidelines can be found at:

    [https://osm.etsi.org/wikipub/index.php/Workflow_with_OSM_tools]
