Adding CORD specific ceilometer changes to monitoring repository
- ceilometer custom notification plugins for ONOS, vSG, vOLT and Infra layers
- ceilometer publish/subscribe module
- ceilometer dynamic pipeline config module
- ceilometer UDP proxy
- ceilometer Custom Image(ceilometer -v2 -v3 versions,kafka_installer,startup scripts)

Change-Id: Ie2ab8ce89cdadbd1fb4dc54ee15e46f8cc8c4c18
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/README.md b/xos/synchronizer/ceilometer/ceilometer-plugins/README.md
new file mode 100644
index 0000000..710ca94
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/README.md
@@ -0,0 +1 @@
+# ceilometer-plugins
\ No newline at end of file
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/ceilometer_entry_points.txt b/xos/synchronizer/ceilometer/ceilometer-plugins/ceilometer_entry_points.txt
new file mode 100644
index 0000000..e30c4ee
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/ceilometer_entry_points.txt
@@ -0,0 +1,14 @@
+[ceilometer.notification]
+#Existing Notification endpoints
+vcpe= ceilometer.network.ext_services.vcpe.notifications:VCPENotification
+vcpe.compute.stats= ceilometer.network.ext_services.vcpe.notifications:VCPEComputeStatistics
+vcpe.dns.cache.size= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSCacheSize
+vcpe.dns.total_instered_entries= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSTotalInsertedEntries
+vcpe.dns.replaced_unexpired_entries= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSReplacedUnexpiredEntries
+vcpe.dns.queries_answered_locally= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSQueriesAnsweredLocally
+vcpe.dns.queries_forwarded= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSQueriesForwarded
+vcpe.dns.server.queries_sent= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSServerQueriesSent
+vcpe.dns.server.queries_failed= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSServerQueriesFailed
+volt.device= ceilometer.network.ext_services.volt.notifications:VOLTDeviceNotification
+volt.device.subscribers= ceilometer.network.ext_services.volt.notifications:VOLTDeviceSubscriberNotification
+infra=ceilometer.network.ext_services.openstack_infra.notifications:OPENSTACK_INFRANotification
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/entry_points.txt b/xos/synchronizer/ceilometer/ceilometer-plugins/entry_points.txt
new file mode 100644
index 0000000..f2b1a5e
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/entry_points.txt
@@ -0,0 +1,350 @@
+[ceilometer.alarm.evaluator]
+combination = ceilometer.alarm.evaluator.combination:CombinationEvaluator
+gnocchi_aggregation_by_metrics_threshold = ceilometer.alarm.evaluator.gnocchi:GnocchiThresholdEvaluator
+gnocchi_aggregation_by_resources_threshold = ceilometer.alarm.evaluator.gnocchi:GnocchiThresholdEvaluator
+gnocchi_resources_threshold = ceilometer.alarm.evaluator.gnocchi:GnocchiThresholdEvaluator
+threshold = ceilometer.alarm.evaluator.threshold:ThresholdEvaluator
+
+[ceilometer.alarm.evaluator_service]
+ceilometer.alarm.service.PartitionedAlarmService = ceilometer.alarm.service:PartitionedAlarmService
+ceilometer.alarm.service.SingletonAlarmService = ceilometer.alarm.service:SingletonAlarmService
+default = ceilometer.alarm.service:AlarmEvaluationService
+partitioned = ceilometer.alarm.service:PartitionedAlarmService
+singleton = ceilometer.alarm.service:SingletonAlarmService
+
+[ceilometer.alarm.notifier]
+http = ceilometer.alarm.notifier.rest:RestAlarmNotifier
+https = ceilometer.alarm.notifier.rest:RestAlarmNotifier
+log = ceilometer.alarm.notifier.log:LogAlarmNotifier
+test = ceilometer.alarm.notifier.test:TestAlarmNotifier
+trust+http = ceilometer.alarm.notifier.trust:TrustRestAlarmNotifier
+trust+https = ceilometer.alarm.notifier.trust:TrustRestAlarmNotifier
+
+[ceilometer.alarm.rule]
+combination = ceilometer.api.controllers.v2.alarm_rules.combination:AlarmCombinationRule
+gnocchi_aggregation_by_metrics_threshold = ceilometer.api.controllers.v2.alarm_rules.gnocchi:AggregationMetricsByIdLookupRule
+gnocchi_aggregation_by_resources_threshold = ceilometer.api.controllers.v2.alarm_rules.gnocchi:AggregationMetricByResourcesLookupRule
+gnocchi_resources_threshold = ceilometer.api.controllers.v2.alarm_rules.gnocchi:MetricOfResourceRule
+threshold = ceilometer.api.controllers.v2.alarm_rules.threshold:AlarmThresholdRule
+
+[ceilometer.alarm.storage]
+db2 = ceilometer.alarm.storage.impl_db2:Connection
+hbase = ceilometer.alarm.storage.impl_hbase:Connection
+log = ceilometer.alarm.storage.impl_log:Connection
+mongodb = ceilometer.alarm.storage.impl_mongodb:Connection
+mysql = ceilometer.alarm.storage.impl_sqlalchemy:Connection
+postgresql = ceilometer.alarm.storage.impl_sqlalchemy:Connection
+sqlite = ceilometer.alarm.storage.impl_sqlalchemy:Connection
+
+[ceilometer.compute.virt]
+hyperv = ceilometer.compute.virt.hyperv.inspector:HyperVInspector
+libvirt = ceilometer.compute.virt.libvirt.inspector:LibvirtInspector
+vsphere = ceilometer.compute.virt.vmware.inspector:VsphereInspector
+xenapi = ceilometer.compute.virt.xenapi.inspector:XenapiInspector
+
+[ceilometer.discover]
+endpoint = ceilometer.agent.discovery.endpoint:EndpointDiscovery
+fw_policy = ceilometer.network.services.discovery:FirewallPolicyDiscovery
+fw_services = ceilometer.network.services.discovery:FirewallDiscovery
+ipsec_connections = ceilometer.network.services.discovery:IPSecConnectionsDiscovery
+lb_health_probes = ceilometer.network.services.discovery:LBHealthMonitorsDiscovery
+lb_members = ceilometer.network.services.discovery:LBMembersDiscovery
+lb_pools = ceilometer.network.services.discovery:LBPoolsDiscovery
+lb_vips = ceilometer.network.services.discovery:LBVipsDiscovery
+local_instances = ceilometer.compute.discovery:InstanceDiscovery
+local_node = ceilometer.agent.discovery.localnode:LocalNodeDiscovery
+tenant = ceilometer.agent.discovery.tenant:TenantDiscovery
+tripleo_overcloud_nodes = ceilometer.hardware.discovery:NodesDiscoveryTripleO
+vpn_services = ceilometer.network.services.discovery:VPNServicesDiscovery
+
+[ceilometer.dispatcher]
+database = ceilometer.dispatcher.database:DatabaseDispatcher
+file = ceilometer.dispatcher.file:FileDispatcher
+http = ceilometer.dispatcher.http:HttpDispatcher
+
+[ceilometer.event.publisher]
+direct = ceilometer.publisher.direct:DirectPublisher
+kafka = ceilometer.publisher.kafka_broker:KafkaBrokerPublisher
+notifier = ceilometer.publisher.messaging:EventNotifierPublisher
+test = ceilometer.publisher.test:TestPublisher
+
+[ceilometer.event.storage]
+db2 = ceilometer.event.storage.impl_db2:Connection
+es = ceilometer.event.storage.impl_elasticsearch:Connection
+hbase = ceilometer.event.storage.impl_hbase:Connection
+log = ceilometer.event.storage.impl_log:Connection
+mongodb = ceilometer.event.storage.impl_mongodb:Connection
+mysql = ceilometer.event.storage.impl_sqlalchemy:Connection
+postgresql = ceilometer.event.storage.impl_sqlalchemy:Connection
+sqlite = ceilometer.event.storage.impl_sqlalchemy:Connection
+
+[ceilometer.event.trait_plugin]
+bitfield = ceilometer.event.trait_plugins:BitfieldTraitPlugin
+split = ceilometer.event.trait_plugins:SplitterTraitPlugin
+
+[ceilometer.hardware.inspectors]
+snmp = ceilometer.hardware.inspector.snmp:SNMPInspector
+
+[ceilometer.metering.storage]
+db2 = ceilometer.storage.impl_db2:Connection
+hbase = ceilometer.storage.impl_hbase:Connection
+log = ceilometer.storage.impl_log:Connection
+mongodb = ceilometer.storage.impl_mongodb:Connection
+mysql = ceilometer.storage.impl_sqlalchemy:Connection
+postgresql = ceilometer.storage.impl_sqlalchemy:Connection
+sqlite = ceilometer.storage.impl_sqlalchemy:Connection
+
+[ceilometer.notification]
+authenticate = ceilometer.identity.notifications:Authenticate
+bandwidth = ceilometer.network.notifications:Bandwidth
+cpu_frequency = ceilometer.compute.notifications.cpu:CpuFrequency
+cpu_idle_percent = ceilometer.compute.notifications.cpu:CpuIdlePercent
+cpu_idle_time = ceilometer.compute.notifications.cpu:CpuIdleTime
+cpu_iowait_percent = ceilometer.compute.notifications.cpu:CpuIowaitPercent
+cpu_iowait_time = ceilometer.compute.notifications.cpu:CpuIowaitTime
+cpu_kernel_percent = ceilometer.compute.notifications.cpu:CpuKernelPercent
+cpu_kernel_time = ceilometer.compute.notifications.cpu:CpuKernelTime
+cpu_percent = ceilometer.compute.notifications.cpu:CpuPercent
+cpu_user_percent = ceilometer.compute.notifications.cpu:CpuUserPercent
+cpu_user_time = ceilometer.compute.notifications.cpu:CpuUserTime
+data_processing = ceilometer.data_processing.notifications:DataProcessing
+disk_ephemeral_size = ceilometer.compute.notifications.instance:EphemeralDiskSize
+disk_root_size = ceilometer.compute.notifications.instance:RootDiskSize
+floatingip = ceilometer.network.notifications:FloatingIP
+group = ceilometer.identity.notifications:Group
+hardware.ipmi.current = ceilometer.ipmi.notifications.ironic:CurrentSensorNotification
+hardware.ipmi.fan = ceilometer.ipmi.notifications.ironic:FanSensorNotification
+hardware.ipmi.temperature = ceilometer.ipmi.notifications.ironic:TemperatureSensorNotification
+hardware.ipmi.voltage = ceilometer.ipmi.notifications.ironic:VoltageSensorNotification
+http.request = ceilometer.middleware:HTTPRequest
+http.response = ceilometer.middleware:HTTPResponse
+image = ceilometer.image.notifications:Image
+image_crud = ceilometer.image.notifications:ImageCRUD
+image_download = ceilometer.image.notifications:ImageDownload
+image_serve = ceilometer.image.notifications:ImageServe
+image_size = ceilometer.image.notifications:ImageSize
+instance = ceilometer.compute.notifications.instance:Instance
+instance_delete = ceilometer.compute.notifications.instance:InstanceDelete
+instance_flavor = ceilometer.compute.notifications.instance:InstanceFlavor
+instance_scheduled = ceilometer.compute.notifications.instance:InstanceScheduled
+magnetodb_index_count = ceilometer.key_value_storage.notifications:Index
+magnetodb_table = ceilometer.key_value_storage.notifications:Table
+memory = ceilometer.compute.notifications.instance:Memory
+network = ceilometer.network.notifications:Network
+network.services.firewall = ceilometer.network.notifications:Firewall
+network.services.firewall.policy = ceilometer.network.notifications:FirewallPolicy
+network.services.firewall.rule = ceilometer.network.notifications:FirewallRule
+network.services.lb.health_monitor = ceilometer.network.notifications:HealthMonitor
+network.services.lb.member = ceilometer.network.notifications:Member
+network.services.lb.pool = ceilometer.network.notifications:Pool
+network.services.lb.vip = ceilometer.network.notifications:Vip
+network.services.vpn = ceilometer.network.notifications:VPNService
+network.services.vpn.connections = ceilometer.network.notifications:IPSecSiteConnection
+network.services.vpn.ikepolicy = ceilometer.network.notifications:IKEPolicy
+network.services.vpn.ipsecpolicy = ceilometer.network.notifications:IPSecPolicy
+objectstore.request = ceilometer.objectstore.notifications:SwiftWsgiMiddleware
+objectstore.request.meters = ceilometer.objectstore.notifications:SwiftWsgiMiddlewareMeters
+port = ceilometer.network.notifications:Port
+profiler = ceilometer.profiler.notifications:ProfilerNotifications
+project = ceilometer.identity.notifications:Project
+role = ceilometer.identity.notifications:Role
+role_assignment = ceilometer.identity.notifications:RoleAssignment
+router = ceilometer.network.notifications:Router
+snapshot = ceilometer.volume.notifications:Snapshot
+snapshot_crud = ceilometer.volume.notifications:SnapshotCRUD
+snapshot_size = ceilometer.volume.notifications:SnapshotSize
+stack_crud = ceilometer.orchestration.notifications:StackCRUD
+subnet = ceilometer.network.notifications:Subnet
+trust = ceilometer.identity.notifications:Trust
+user = ceilometer.identity.notifications:User
+vcpus = ceilometer.compute.notifications.instance:VCpus
+volume = ceilometer.volume.notifications:Volume
+volume_crud = ceilometer.volume.notifications:VolumeCRUD
+volume_size = ceilometer.volume.notifications:VolumeSize
+vcpe= ceilometer.network.ext_services.vcpe.notifications:VCPENotification
+vcpe.compute.stats= ceilometer.network.ext_services.vcpe.notifications:VCPEComputeStatistics
+vcpe.dns.cache.size= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSCacheSize
+vcpe.dns.total_instered_entries= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSTotalInsertedEntries
+vcpe.dns.replaced_unexpired_entries= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSReplacedUnexpiredEntries
+vcpe.dns.queries_answered_locally= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSQueriesAnsweredLocally
+vcpe.dns.queries_forwarded= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSQueriesForwarded
+vcpe.dns.server.queries_sent= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSServerQueriesSent
+vcpe.dns.server.queries_failed= ceilometer.network.ext_services.vcpe.notifications:VCPEDNSServerQueriesFailed
+volt.device= ceilometer.network.ext_services.volt.notifications:VOLTDeviceNotification
+volt.device.subscribers= ceilometer.network.ext_services.volt.notifications:VOLTDeviceSubscriberNotification
+
+[ceilometer.poll.central]
+energy = ceilometer.energy.kwapi:EnergyPollster
+hardware.cpu.load.15min = ceilometer.hardware.pollsters.cpu:CPULoad15MinPollster
+hardware.cpu.load.1min = ceilometer.hardware.pollsters.cpu:CPULoad1MinPollster
+hardware.cpu.load.5min = ceilometer.hardware.pollsters.cpu:CPULoad5MinPollster
+hardware.disk.size.total = ceilometer.hardware.pollsters.disk:DiskTotalPollster
+hardware.disk.size.used = ceilometer.hardware.pollsters.disk:DiskUsedPollster
+hardware.memory.swap.avail = ceilometer.hardware.pollsters.memory:MemorySwapAvailPollster
+hardware.memory.swap.total = ceilometer.hardware.pollsters.memory:MemorySwapTotalPollster
+hardware.memory.total = ceilometer.hardware.pollsters.memory:MemoryTotalPollster
+hardware.memory.used = ceilometer.hardware.pollsters.memory:MemoryUsedPollster
+hardware.network.incoming.bytes = ceilometer.hardware.pollsters.net:IncomingBytesPollster
+hardware.network.ip.incoming.datagrams = ceilometer.hardware.pollsters.network_aggregated:NetworkAggregatedIPInReceives
+hardware.network.ip.outgoing.datagrams = ceilometer.hardware.pollsters.network_aggregated:NetworkAggregatedIPOutRequests
+hardware.network.outgoing.bytes = ceilometer.hardware.pollsters.net:OutgoingBytesPollster
+hardware.network.outgoing.errors = ceilometer.hardware.pollsters.net:OutgoingErrorsPollster
+hardware.system_stats.cpu.idle = ceilometer.hardware.pollsters.system:SystemCpuIdlePollster
+hardware.system_stats.io.incoming.blocks = ceilometer.hardware.pollsters.system:SystemIORawReceivedPollster
+hardware.system_stats.io.outgoing.blocks = ceilometer.hardware.pollsters.system:SystemIORawSentPollster
+image = ceilometer.image.glance:ImagePollster
+image.size = ceilometer.image.glance:ImageSizePollster
+ip.floating = ceilometer.network.floatingip:FloatingIPPollster
+network.services.firewall = ceilometer.network.services.fwaas:FirewallPollster
+network.services.firewall.policy = ceilometer.network.services.fwaas:FirewallPolicyPollster
+network.services.lb.active.connections = ceilometer.network.services.lbaas:LBActiveConnectionsPollster
+network.services.lb.health_monitor = ceilometer.network.services.lbaas:LBHealthMonitorPollster
+network.services.lb.incoming.bytes = ceilometer.network.services.lbaas:LBBytesInPollster
+network.services.lb.member = ceilometer.network.services.lbaas:LBMemberPollster
+network.services.lb.outgoing.bytes = ceilometer.network.services.lbaas:LBBytesOutPollster
+network.services.lb.pool = ceilometer.network.services.lbaas:LBPoolPollster
+network.services.lb.total.connections = ceilometer.network.services.lbaas:LBTotalConnectionsPollster
+network.services.lb.vip = ceilometer.network.services.lbaas:LBVipPollster
+network.services.vpn = ceilometer.network.services.vpnaas:VPNServicesPollster
+network.services.vpn.connections = ceilometer.network.services.vpnaas:IPSecConnectionsPollster
+power = ceilometer.energy.kwapi:PowerPollster
+rgw.containers.objects = ceilometer.objectstore.rgw:ContainersObjectsPollster
+rgw.containers.objects.size = ceilometer.objectstore.rgw:ContainersSizePollster
+rgw.objects = ceilometer.objectstore.rgw:ObjectsPollster
+rgw.objects.containers = ceilometer.objectstore.rgw:ObjectsContainersPollster
+rgw.objects.size = ceilometer.objectstore.rgw:ObjectsSizePollster
+rgw.usage = ceilometer.objectstore.rgw:UsagePollster
+storage.containers.objects = ceilometer.objectstore.swift:ContainersObjectsPollster
+storage.containers.objects.size = ceilometer.objectstore.swift:ContainersSizePollster
+storage.objects = ceilometer.objectstore.swift:ObjectsPollster
+storage.objects.containers = ceilometer.objectstore.swift:ObjectsContainersPollster
+storage.objects.size = ceilometer.objectstore.swift:ObjectsSizePollster
+switch = ceilometer.network.statistics.switch:SWPollster
+switch.flow = ceilometer.network.statistics.flow:FlowPollster
+switch.flow.bytes = ceilometer.network.statistics.flow:FlowPollsterBytes
+switch.flow.duration.nanoseconds = ceilometer.network.statistics.flow:FlowPollsterDurationNanoseconds
+switch.flow.duration.seconds = ceilometer.network.statistics.flow:FlowPollsterDurationSeconds
+switch.flow.packets = ceilometer.network.statistics.flow:FlowPollsterPackets
+switch.port = ceilometer.network.statistics.port:PortPollster
+switch.port.collision.count = ceilometer.network.statistics.port:PortPollsterCollisionCount
+switch.port.receive.bytes = ceilometer.network.statistics.port:PortPollsterReceiveBytes
+switch.port.receive.crc_error = ceilometer.network.statistics.port:PortPollsterReceiveCRCErrors
+switch.port.receive.drops = ceilometer.network.statistics.port:PortPollsterReceiveDrops
+switch.port.receive.errors = ceilometer.network.statistics.port:PortPollsterReceiveErrors
+switch.port.receive.frame_error = ceilometer.network.statistics.port:PortPollsterReceiveFrameErrors
+switch.port.receive.overrun_error = ceilometer.network.statistics.port:PortPollsterReceiveOverrunErrors
+switch.port.receive.packets = ceilometer.network.statistics.port:PortPollsterReceivePackets
+switch.port.transmit.bytes = ceilometer.network.statistics.port:PortPollsterTransmitBytes
+switch.port.transmit.drops = ceilometer.network.statistics.port:PortPollsterTransmitDrops
+switch.port.transmit.errors = ceilometer.network.statistics.port:PortPollsterTransmitErrors
+switch.port.transmit.packets = ceilometer.network.statistics.port:PortPollsterTransmitPackets
+switch.table = ceilometer.network.statistics.table:TablePollster
+switch.table.active.entries = ceilometer.network.statistics.table:TablePollsterActiveEntries
+switch.table.lookup.packets = ceilometer.network.statistics.table:TablePollsterLookupPackets
+switch.table.matched.packets = ceilometer.network.statistics.table:TablePollsterMatchedPackets
+
+[ceilometer.poll.compute]
+cpu = ceilometer.compute.pollsters.cpu:CPUPollster
+cpu_util = ceilometer.compute.pollsters.cpu:CPUUtilPollster
+disk.allocation = ceilometer.compute.pollsters.disk:AllocationPollster
+disk.capacity = ceilometer.compute.pollsters.disk:CapacityPollster
+disk.device.allocation = ceilometer.compute.pollsters.disk:PerDeviceAllocationPollster
+disk.device.capacity = ceilometer.compute.pollsters.disk:PerDeviceCapacityPollster
+disk.device.iops = ceilometer.compute.pollsters.disk:PerDeviceDiskIOPSPollster
+disk.device.latency = ceilometer.compute.pollsters.disk:PerDeviceDiskLatencyPollster
+disk.device.read.bytes = ceilometer.compute.pollsters.disk:PerDeviceReadBytesPollster
+disk.device.read.bytes.rate = ceilometer.compute.pollsters.disk:PerDeviceReadBytesRatePollster
+disk.device.read.requests = ceilometer.compute.pollsters.disk:PerDeviceReadRequestsPollster
+disk.device.read.requests.rate = ceilometer.compute.pollsters.disk:PerDeviceReadRequestsRatePollster
+disk.device.usage = ceilometer.compute.pollsters.disk:PerDevicePhysicalPollster
+disk.device.write.bytes = ceilometer.compute.pollsters.disk:PerDeviceWriteBytesPollster
+disk.device.write.bytes.rate = ceilometer.compute.pollsters.disk:PerDeviceWriteBytesRatePollster
+disk.device.write.requests = ceilometer.compute.pollsters.disk:PerDeviceWriteRequestsPollster
+disk.device.write.requests.rate = ceilometer.compute.pollsters.disk:PerDeviceWriteRequestsRatePollster
+disk.iops = ceilometer.compute.pollsters.disk:DiskIOPSPollster
+disk.latency = ceilometer.compute.pollsters.disk:DiskLatencyPollster
+disk.read.bytes = ceilometer.compute.pollsters.disk:ReadBytesPollster
+disk.read.bytes.rate = ceilometer.compute.pollsters.disk:ReadBytesRatePollster
+disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster
+disk.read.requests.rate = ceilometer.compute.pollsters.disk:ReadRequestsRatePollster
+disk.usage = ceilometer.compute.pollsters.disk:PhysicalPollster
+disk.write.bytes = ceilometer.compute.pollsters.disk:WriteBytesPollster
+disk.write.bytes.rate = ceilometer.compute.pollsters.disk:WriteBytesRatePollster
+disk.write.requests = ceilometer.compute.pollsters.disk:WriteRequestsPollster
+disk.write.requests.rate = ceilometer.compute.pollsters.disk:WriteRequestsRatePollster
+instance = ceilometer.compute.pollsters.instance:InstancePollster
+instance_flavor = ceilometer.compute.pollsters.instance:InstanceFlavorPollster
+memory.resident = ceilometer.compute.pollsters.memory:MemoryResidentPollster
+memory.usage = ceilometer.compute.pollsters.memory:MemoryUsagePollster
+network.incoming.bytes = ceilometer.compute.pollsters.net:IncomingBytesPollster
+network.incoming.bytes.rate = ceilometer.compute.pollsters.net:IncomingBytesRatePollster
+network.incoming.packets = ceilometer.compute.pollsters.net:IncomingPacketsPollster
+network.outgoing.bytes = ceilometer.compute.pollsters.net:OutgoingBytesPollster
+network.outgoing.bytes.rate = ceilometer.compute.pollsters.net:OutgoingBytesRatePollster
+network.outgoing.packets = ceilometer.compute.pollsters.net:OutgoingPacketsPollster
+
+[ceilometer.poll.ipmi]
+hardware.ipmi.current = ceilometer.ipmi.pollsters.sensor:CurrentSensorPollster
+hardware.ipmi.fan = ceilometer.ipmi.pollsters.sensor:FanSensorPollster
+hardware.ipmi.node.airflow = ceilometer.ipmi.pollsters.node:AirflowPollster
+hardware.ipmi.node.cpu_util = ceilometer.ipmi.pollsters.node:CPUUtilPollster
+hardware.ipmi.node.cups = ceilometer.ipmi.pollsters.node:CUPSIndexPollster
+hardware.ipmi.node.io_util = ceilometer.ipmi.pollsters.node:IOUtilPollster
+hardware.ipmi.node.mem_util = ceilometer.ipmi.pollsters.node:MemUtilPollster
+hardware.ipmi.node.outlet_temperature = ceilometer.ipmi.pollsters.node:OutletTemperaturePollster
+hardware.ipmi.node.power = ceilometer.ipmi.pollsters.node:PowerPollster
+hardware.ipmi.node.temperature = ceilometer.ipmi.pollsters.node:InletTemperaturePollster
+hardware.ipmi.temperature = ceilometer.ipmi.pollsters.sensor:TemperatureSensorPollster
+hardware.ipmi.voltage = ceilometer.ipmi.pollsters.sensor:VoltageSensorPollster
+
+[ceilometer.publisher]
+direct = ceilometer.publisher.direct:DirectPublisher
+file = ceilometer.publisher.file:FilePublisher
+kafka = ceilometer.publisher.kafka_broker:KafkaBrokerPublisher
+meter = ceilometer.publisher.messaging:RPCPublisher
+meter_publisher = ceilometer.publisher.messaging:RPCPublisher
+notifier = ceilometer.publisher.messaging:SampleNotifierPublisher
+rpc = ceilometer.publisher.messaging:RPCPublisher
+test = ceilometer.publisher.test:TestPublisher
+udp = ceilometer.publisher.udp:UDPPublisher
+
+[ceilometer.transformer]
+accumulator = ceilometer.transformer.accumulator:TransformerAccumulator
+aggregator = ceilometer.transformer.conversions:AggregatorTransformer
+arithmetic = ceilometer.transformer.arithmetic:ArithmeticTransformer
+rate_of_change = ceilometer.transformer.conversions:RateOfChangeTransformer
+unit_conversion = ceilometer.transformer.conversions:ScalingTransformer
+
+[console_scripts]
+ceilometer-agent-central = ceilometer.cmd.polling:main_central
+ceilometer-agent-compute = ceilometer.cmd.polling:main_compute
+ceilometer-agent-ipmi = ceilometer.cmd.polling:main_ipmi
+ceilometer-agent-notification = ceilometer.cmd.agent_notification:main
+ceilometer-alarm-evaluator = ceilometer.cmd.alarm:evaluator
+ceilometer-alarm-notifier = ceilometer.cmd.alarm:notifier
+ceilometer-api = ceilometer.cmd.api:main
+ceilometer-collector = ceilometer.cmd.collector:main
+ceilometer-dbsync = ceilometer.cmd.storage:dbsync
+ceilometer-expirer = ceilometer.cmd.storage:expirer
+ceilometer-polling = ceilometer.cmd.polling:main
+ceilometer-rootwrap = oslo_rootwrap.cmd:main
+ceilometer-send-sample = ceilometer.cli:send_sample
+
+[network.statistics.drivers]
+opencontrail = ceilometer.network.statistics.opencontrail.driver:OpencontrailDriver
+opendaylight = ceilometer.network.statistics.opendaylight.driver:OpenDayLightDriver
+onos = ceilometer.network.statistics.onos.driver:ONOSDriver
+
+[oslo.config.opts]
+ceilometer = ceilometer.opts:list_opts
+
+[oslo.messaging.notify.drivers]
+ceilometer.openstack.common.notifier.log_notifier = oslo.messaging.notify._impl_log:LogDriver
+ceilometer.openstack.common.notifier.no_op_notifier = oslo.messaging.notify._impl_noop:NoOpDriver
+ceilometer.openstack.common.notifier.rpc_notifier = oslo.messaging.notify._impl_messaging:MessagingDriver
+ceilometer.openstack.common.notifier.rpc_notifier2 = oslo.messaging.notify._impl_messaging:MessagingV2Driver
+ceilometer.openstack.common.notifier.test_notifier = oslo.messaging.notify._impl_test:TestDriver
+
+[paste.filter_factory]
+swift = ceilometer.objectstore.swift_middleware:filter_factory
+
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/__init__.py
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/__init__.py
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/notifications.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/notifications.py
new file mode 100644
index 0000000..807672d
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/openstack_infra/notifications.py
@@ -0,0 +1,67 @@
+#
+# Copyright 2012 New Dream Network, LLC (DreamHost)
+#
+# 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.
+"""Handler for producing network counter messages from Neutron notification
+   events.
+
+"""
+
+import oslo_messaging
+from oslo_config import cfg
+
+from ceilometer.agent import plugin_base
+from oslo_log import log
+from ceilometer import sample
+
+OPTS = [
+    cfg.StrOpt('openstack_infra_service_control_exchange',
+               default='openstack_infra',
+               help="Exchange name for INFRA notifications."),
+]
+
+cfg.CONF.register_opts(OPTS)
+
+LOG = log.getLogger(__name__)
+
+
+class OPENSTACK_INFRANotificationBase(plugin_base.NotificationBase):
+
+    resource_name = None
+
+    def get_targets(self,conf):
+        """Return a sequence of oslo.messaging.Target
+        This sequence is defining the exchange and topics to be connected for
+        this plugin.
+        """
+        LOG.info("get_targets for OPENSTACK INFRA Notification Listener")
+        return [oslo_messaging.Target(topic=topic,
+                                      exchange=conf.openstack_infra_service_control_exchange)
+                for topic in self.get_notification_topics(conf)]
+
+class OPENSTACK_INFRANotification(OPENSTACK_INFRANotificationBase):
+
+    resource_name = None
+    event_types = ['infra$']
+
+    def process_notification(self, message):
+        LOG.info('Received OPENSTACK INFRA notification: resource_id =%(resource_id)s' % {'resource_id': message['payload']['resource_id']})
+        yield sample.Sample.from_notification(
+            name=message['payload']['counter_name'],
+            type=message['payload']['counter_type'],
+            unit=message['payload']['counter_unit'],
+            volume=message['payload']['counter_volume'],   
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['project_id'],
+            resource_id=message['payload']['resource_id'],
+            message=message)
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/__init__.py
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/notifications.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/notifications.py
new file mode 100644
index 0000000..06a2eb7
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/vcpe/notifications.py
@@ -0,0 +1,272 @@
+#
+# Copyright 2012 New Dream Network, LLC (DreamHost)
+#
+# 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.
+"""Handler for producing network counter messages from Neutron notification
+   events.
+
+"""
+
+import oslo_messaging
+from oslo_config import cfg
+
+from ceilometer.agent import plugin_base
+from oslo_log import log
+from ceilometer import sample
+
+OPTS = [
+    cfg.StrOpt('vsgservice_control_exchange',
+               default='vcpeservice',
+               help="Exchange name for VCPE notifications."),
+]
+
+cfg.CONF.register_opts(OPTS)
+
+LOG = log.getLogger(__name__)
+
+
+class VCPENotificationBase(plugin_base.NotificationBase):
+
+    resource_name = None
+
+    def get_targets(self,conf):
+        """Return a sequence of oslo.messaging.Target
+
+        This sequence is defining the exchange and topics to be connected for
+        this plugin.
+        """
+        LOG.info("SRIKANTH: get_targets for VCPE Notification Listener")
+        return [oslo_messaging.Target(topic=topic,
+                                      exchange=conf.vsgservice_control_exchange)
+                for topic in self.get_notification_topics(conf)]
+
+class VCPENotification(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe$']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE notification: vcpe_id=%(vcpe_id)s' % {'vcpe_id': message['payload']['vcpe_id']})
+        yield sample.Sample.from_notification(
+            name='vsg',
+            type=sample.TYPE_GAUGE,
+            unit='vsg',
+            volume=1,
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEComputeStatistics(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.compute.stats']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE event vcpe.compute.stats')
+        if message['payload']:
+            if 'cpu_util' in message['payload']:
+                yield sample.Sample.from_notification(
+                    name='cpu_util',
+                    type=sample.TYPE_GAUGE,
+                    unit='%',
+                    volume=float(message['payload']['cpu_util']),
+                    user_id=message['payload']['user_id'],
+                    project_id=message['payload']['tenant_id'],
+                    resource_id=message['payload']['vcpe_id'],
+                    message=message)
+            if 'memory' in message['payload']:
+                yield sample.Sample.from_notification(
+                    name='memory',
+                    type=sample.TYPE_GAUGE,
+                    unit='MB',
+                    volume=float(message['payload']['memory']),
+                    user_id=message['payload']['user_id'],
+                    project_id=message['payload']['tenant_id'],
+                    resource_id=message['payload']['vcpe_id'],
+                    message=message)
+            if 'memory_usage' in message['payload']:
+                yield sample.Sample.from_notification(
+                    name='memory.usage',
+                    type=sample.TYPE_GAUGE,
+                    unit='MB',
+                    volume=float(message['payload']['memory_usage']),
+                    user_id=message['payload']['user_id'],
+                    project_id=message['payload']['tenant_id'],
+                    resource_id=message['payload']['vcpe_id'],
+                    message=message)
+            if 'network_stats' in message['payload']:
+                for intf in message['payload']['network_stats']:
+                    resource_id = message['payload']['vcpe_id'] + '-' + intf['intf']
+                    if 'rx_bytes' in intf:
+                        yield sample.Sample.from_notification(
+                            name='network.incoming.bytes',
+                            type=sample.TYPE_CUMULATIVE,
+                            unit='B',
+                            volume=float(intf['rx_bytes']),
+                            user_id=message['payload']['user_id'],
+                            project_id=message['payload']['tenant_id'],
+                            resource_id=resource_id,
+                            message=message)
+                    if 'tx_bytes' in intf:
+                        yield sample.Sample.from_notification(
+                            name='network.outgoing.bytes',
+                            type=sample.TYPE_CUMULATIVE,
+                            unit='B',
+                            volume=float(intf['tx_bytes']),
+                            user_id=message['payload']['user_id'],
+                            project_id=message['payload']['tenant_id'],
+                            resource_id=resource_id,
+                            message=message)
+                    if 'rx_packets' in intf:
+                        yield sample.Sample.from_notification(
+                            name='network.incoming.packets',
+                            type=sample.TYPE_CUMULATIVE,
+                            unit='packet',
+                            volume=float(intf['rx_packets']),
+                            user_id=message['payload']['user_id'],
+                            project_id=message['payload']['tenant_id'],
+                            resource_id=resource_id,
+                            message=message)
+                    if 'tx_packets' in intf:
+                        yield sample.Sample.from_notification(
+                            name='network.outgoing.packets',
+                            type=sample.TYPE_CUMULATIVE,
+                            unit='packet',
+                            volume=float(intf['tx_packets']),
+                            user_id=message['payload']['user_id'],
+                            project_id=message['payload']['tenant_id'],
+                            resource_id=resource_id,
+                            message=message)
+
+class VCPEDNSCacheSize(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.cache.size']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE cache.size notification')
+        yield sample.Sample.from_notification(
+            name='vsg.dns.cache.size',
+            type=sample.TYPE_GAUGE,
+            unit='entries',
+            volume=float(message['payload']['cache_size']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEDNSTotalInsertedEntries(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.total_instered_entries']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE total_instered_entries notification')
+        yield sample.Sample.from_notification(
+            name='vsg.dns.total_instered_entries',
+            type=sample.TYPE_CUMULATIVE,
+            unit='entries',
+            volume=float(message['payload']['total_instered_entries']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEDNSReplacedUnexpiredEntries(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.replaced_unexpired_entries']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE replaced_unexpired_entries notification')
+        yield sample.Sample.from_notification(
+            name='vsg.dns.replaced_unexpired_entries',
+            type=sample.TYPE_CUMULATIVE,
+            unit='entries',
+            volume=float(message['payload']['replaced_unexpired_entries']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEDNSQueriesForwarded(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.queries_forwarded']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE queries_forwarded notification')
+        yield sample.Sample.from_notification(
+            name='vsg.dns.queries_forwarded',
+            type=sample.TYPE_CUMULATIVE,
+            unit='queries',
+            volume=float(message['payload']['queries_forwarded']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEDNSQueriesAnsweredLocally(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.queries_answered_locally']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE queries_answered_locally notification')
+        yield sample.Sample.from_notification(
+            name='vsg.dns.queries_answered_locally',
+            type=sample.TYPE_CUMULATIVE,
+            unit='queries',
+            volume=float(message['payload']['queries_answered_locally']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=message['payload']['vcpe_id'],
+            message=message)
+
+class VCPEDNSServerQueriesSent(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.server.queries_sent']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE server.queries_sent notification')
+        resource_id = message['payload']['vcpe_id'] + '-' + message['payload']['upstream_server']
+        yield sample.Sample.from_notification(
+            name='vsg.dns.server.queries_sent',
+            type=sample.TYPE_CUMULATIVE,
+            unit='queries',
+            volume=float(message['payload']['queries_sent']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=resource_id,
+            message=message)
+
+class VCPEDNSServerQueriesFailed(VCPENotificationBase):
+
+    resource_name = None
+    event_types = ['vcpe.dns.server.queries_failed']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VCPE server.queries_failed notification')
+        resource_id = message['payload']['vcpe_id'] + '-' + message['payload']['upstream_server']
+        yield sample.Sample.from_notification(
+            name='vsg.dns.server.queries_failed',
+            type=sample.TYPE_CUMULATIVE,
+            unit='queries',
+            volume=float(message['payload']['queries_failed']),
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['tenant_id'],
+            resource_id=resource_id,
+            message=message)
+
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/__init__.py
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/notifications.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/notifications.py
new file mode 100644
index 0000000..a1f3173
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/ext_services/volt/notifications.py
@@ -0,0 +1,86 @@
+#
+# Copyright 2012 New Dream Network, LLC (DreamHost)
+#
+# 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.
+"""Handler for producing network counter messages from Neutron notification
+   events.
+
+"""
+
+import oslo_messaging
+from oslo_config import cfg
+
+from ceilometer.agent import plugin_base
+from oslo_log import log
+from ceilometer import sample
+
+OPTS = [
+    cfg.StrOpt('voltservice_control_exchange',
+               default='voltlistener',
+               help="Exchange name for VOLT notifications."),
+]
+
+cfg.CONF.register_opts(OPTS)
+
+LOG = log.getLogger(__name__)
+
+
+class VOLTNotificationBase(plugin_base.NotificationBase):
+
+    resource_name = None
+
+    def get_targets(self,conf):
+        """Return a sequence of oslo.messaging.Target
+
+        This sequence is defining the exchange and topics to be connected for
+        this plugin.
+        """
+        LOG.info("SRIKANTH: get_targets for VOLT Notification Listener")
+        return [oslo_messaging.Target(topic=topic,
+                                      exchange=conf.voltservice_control_exchange)
+                for topic in self.get_notification_topics(conf)]
+
+class VOLTDeviceNotification(VOLTNotificationBase):
+    resource_name = 'volt.device'
+    event_types = ['volt.device','volt.device.disconnect']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VOLT notification')
+        yield sample.Sample.from_notification(
+            name=message['event_type'],
+            type=sample.TYPE_GAUGE,
+            unit='olt',
+            volume=1,
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['project_id'],
+            resource_id=message['payload']['id'],
+            message=message)
+
+class VOLTDeviceSubscriberNotification(VOLTNotificationBase):
+    resource_name = 'volt.device.subscriber'
+    event_types = ['volt.device.subscriber','volt.device.subscriber.unregister']
+
+    def process_notification(self, message):
+        LOG.info('SRIKANTH: Received VOLT notification')
+        resource_id = message['payload']['id'] + '-' + message['payload']['subscriber_id']
+        yield sample.Sample.from_notification(
+            name=message['event_type'],
+            type=sample.TYPE_GAUGE,
+            unit='subscriber',
+            volume=1,
+            user_id=message['payload']['user_id'],
+            project_id=message['payload']['project_id'],
+            resource_id=resource_id,
+            message=message)
+
+
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/__init__.py
new file mode 100644
index 0000000..9c53c36
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/__init__.py
@@ -0,0 +1,101 @@
+#
+# Copyright 2014 NEC Corporation.  All rights reserved.
+#
+# 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.
+
+import abc
+
+from oslo_utils import netutils
+import six
+from six.moves.urllib import parse as urlparse
+from stevedore import driver as _driver
+
+from ceilometer.agent import plugin_base
+from ceilometer import sample
+
+
+@six.add_metaclass(abc.ABCMeta)
+class _Base(plugin_base.PollsterBase):
+
+    NAMESPACE = 'network.statistics.drivers'
+    drivers = {}
+
+    @property
+    def default_discovery(self):
+        # this signifies that the pollster gets its resources from
+        # elsewhere, in this case they're manually listed in the
+        # pipeline configuration
+        return None
+
+    @abc.abstractproperty
+    def meter_name(self):
+        """Return a Meter Name."""
+
+    @abc.abstractproperty
+    def meter_type(self):
+        """Return a Meter Type."""
+
+    @abc.abstractproperty
+    def meter_unit(self):
+        """Return a Meter Unit."""
+
+    @staticmethod
+    def _parse_my_resource(resource):
+
+        parse_url = netutils.urlsplit(resource)
+
+        params = urlparse.parse_qs(parse_url.query)
+        parts = urlparse.ParseResult(parse_url.scheme,
+                                     parse_url.netloc,
+                                     parse_url.path,
+                                     None,
+                                     None,
+                                     None)
+        return parts, params
+
+    @staticmethod
+    def get_driver(scheme):
+        if scheme not in _Base.drivers:
+            _Base.drivers[scheme] = _driver.DriverManager(_Base.NAMESPACE,
+                                                          scheme).driver()
+        return _Base.drivers[scheme]
+
+    def get_samples(self, manager, cache, resources):
+        resources = resources or []
+        for resource in resources:
+            parse_url, params = self._parse_my_resource(resource)
+            ext = self.get_driver(parse_url.scheme)
+            sample_data = ext.get_sample_data(self.meter_name,
+                                              parse_url,
+                                              params,
+                                              cache)
+
+            for data in sample_data or []:
+                if data is None:
+                    continue
+                if not isinstance(data, list):
+                    data = [data]
+                for (volume, resource_id,
+                     resource_metadata, timestamp) in data:
+
+                    yield sample.Sample(
+                        name=self.meter_name,
+                        type=self.meter_type,
+                        unit=self.meter_unit,
+                        volume=volume,
+                        user_id=None,
+                        project_id='default_admin_tenant',
+                        resource_id=resource_id,
+                        timestamp=timestamp,
+                        resource_metadata=resource_metadata
+                    )
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/__init__.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/__init__.py
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/client.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/client.py
new file mode 100644
index 0000000..46b6285
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/client.py
@@ -0,0 +1,250 @@
+#
+# Copyright 2013 NEC Corporation.  All rights reserved.
+#
+# 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.
+
+import abc
+
+from oslo_config import cfg
+import requests
+from requests import auth
+import six
+import json
+
+from ceilometer.i18n import _
+from ceilometer.openstack.common import log
+
+
+CONF = cfg.CONF
+CONF.import_opt('http_timeout', 'ceilometer.service')
+
+
+LOG = log.getLogger(__name__)
+
+
+@six.add_metaclass(abc.ABCMeta)
+class _Base(object):
+    """Base class of ONOS REST APIs Clients."""
+
+    @abc.abstractproperty
+    def base_url(self):
+        """Returns base url for each REST API."""
+
+    def __init__(self, client):
+        self.client = client
+
+    def request(self, path, container_name):
+        return self.client.request(self.base_url + path, container_name)
+
+
+class ONOSRESTAPIFailed(Exception):
+    pass
+
+
+class ONOSRESTAPIClient(_Base):
+    """ONOS Statistics REST API Client
+
+    Base URL:
+      {endpoint}/onos/v1
+    """
+
+    base_url = '/onos/v1'
+
+    def get_devices(self, container_name):
+        """Get device informations
+
+        URL:
+            {Base URL}/devices
+        """
+        output = '{ "devices":[ \
+                     { \
+                        "id":"of:0000000000000001", \
+                        "type":"SWITCH", \
+                        "available":true, \
+                        "role":"MASTER", \
+                        "mfr":"Stanford University, Ericsson Research and CPqD Research", \
+                        "hw":"OpenFlow 1.3 Reference Userspace Switch", \
+                        "sw":"Apr  6 2015 16:10:53", \
+                        "serial":"1", \
+                        "chassisId":"1", \
+                        "annotations":{"protocol":"OF_13","channelId":"192.168.10.50:39306"} \
+                     }]}'
+
+        return self.request('/devices', container_name)
+        #LOG.info("SRIKANTH: Returning dummy ONOS devices output")
+        #outputJson = json.loads(output)
+        #return outputJson
+
+    def get_flow_statistics(self, container_name):
+        """Get flow statistics
+
+        URL:
+            {Base URL}/flows
+        """
+        output = '{"flows":[ \
+                       { \
+                          "deviceId":"of:0000000000000001", \
+                          "id":"3377699721451393", \
+                          "tableId":2, \
+                          "appId":12, \
+                          "groupId":0, \
+                          "priority":100, \
+                          "timeout":0, \
+                          "isPermanent":true, \
+                          "state":"PENDING_ADD", \
+                          "life":0, \
+                          "packets":0, \
+                          "bytes":0, \
+                          "lastSeen":1439355470576, \
+                          "treatment":{"instructions":[],"deferred":[]}, \
+                          "selector":{"criteria":[]} \
+                      }]}'
+        return self.request('/flows', container_name)
+        #LOG.info("SRIKANTH: Returning dummy ONOS flow statistics output")
+        #outputJson = json.loads(output)
+        #return outputJson
+
+    def get_port_statistics(self, container_name):
+        """Get port statistics
+
+        URL:
+            {Base URL}/portstats
+        """
+        output = '{ "portstats": [ \
+                      { \
+                          "deviceId":"of:0000000000000001", \
+                          "id":"3", \
+                          "receivePackets": "182", \
+                          "sentPackets": "173", \
+                          "receiveBytes": "12740", \
+                          "sentBytes": "12110", \
+                          "receiveDrops": "740", \
+                          "sentDrops": "110", \
+                          "receiveErrors": "740", \
+                          "sentErrors": "110", \
+                          "receiveFrameError": "740", \
+                          "receiveOverRunError": "740", \
+                          "receiveCrcError": "740", \
+                          "collisionCount": "110" \
+                      }]}'
+        #TODO Add Portstats REST API to ONOS
+        return self.request('/statistics/ports', container_name)
+        #LOG.info("SRIKANTH: Returning dummy ONOS port statistics output")
+        #outputJson = json.loads(output)
+        #return outputJson
+
+    def get_table_statistics(self, container_name):
+        """Get table statistics
+
+        URL:
+            {Base URL}/table
+        """
+        output = '{ \
+                      "tableStatistics": [ \
+                          { \
+                              "deviceId":"of:0000000000000001", \
+                              "id":"4", \
+                              "activeCount": "11", \
+                              "lookupCount": "816", \
+                              "matchedCount": "220", \
+                              "maximumEntries": "1000" \
+                          } \
+                       ] \
+                    }'
+        #TODO Add table statistics REST API to ONOS
+        return self.request('/statistics/flows/tables', container_name)
+        #LOG.info("SRIKANTH: Returning dummy ONOS table statistics output")
+        #outputJson = json.loads(output)
+        #return outputJson
+
+class Client(object):
+
+    def __init__(self, endpoint, params):
+        self.rest_client = ONOSRESTAPIClient(self)
+
+        self._endpoint = endpoint
+
+        self._req_params = self._get_req_params(params)
+
+    @staticmethod
+    def _get_req_params(params):
+        req_params = {
+            'headers': {
+                'Accept': 'application/json'
+            },
+            'timeout': CONF.http_timeout,
+        }
+
+        auth_way = params.get('auth')
+        if auth_way in ['basic', 'digest']:
+            user = params.get('user')
+            password = params.get('password')
+
+            if auth_way == 'basic':
+                auth_class = auth.HTTPBasicAuth
+            else:
+                auth_class = auth.HTTPDigestAuth
+
+            req_params['auth'] = auth_class(user, password)
+        return req_params
+
+    def _log_req(self, url):
+
+        curl_command = ['REQ: curl -i -X GET ', '"%s" ' % (url)]
+
+        if 'auth' in self._req_params:
+            auth_class = self._req_params['auth']
+            if isinstance(auth_class, auth.HTTPBasicAuth):
+                curl_command.append('--basic ')
+            else:
+                curl_command.append('--digest ')
+
+            curl_command.append('--user "%s":"%s" ' % (auth_class.username,
+                                                       auth_class.password))
+
+        for name, value in six.iteritems(self._req_params['headers']):
+            curl_command.append('-H "%s: %s" ' % (name, value))
+
+        LOG.debug(''.join(curl_command))
+
+    @staticmethod
+    def _log_res(resp):
+
+        dump = ['RES: \n', 'HTTP %.1f %s %s\n' % (resp.raw.version,
+                                                  resp.status_code,
+                                                  resp.reason)]
+        dump.extend('%s: %s\n' % (k, v)
+                    for k, v in six.iteritems(resp.headers))
+        dump.append('\n')
+        if resp.content:
+            dump.extend([resp.content, '\n'])
+
+        LOG.debug(''.join(dump))
+
+    def _http_request(self, url):
+        if CONF.debug:
+            self._log_req(url)
+        resp = requests.get(url, **self._req_params)
+        if CONF.debug:
+            self._log_res(resp)
+        if resp.status_code / 100 != 2:
+            raise ONOSRESTAPIFailed(
+                _('ONOS API returned %(status)s %(reason)s') %
+                {'status': resp.status_code, 'reason': resp.reason})
+
+        return resp.json()
+
+    def request(self, path, container_name):
+
+        url = self._endpoint + path % {'container_name': container_name}
+        return self._http_request(url)
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/driver.py b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/driver.py
new file mode 100644
index 0000000..810275f
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/network/statistics/onos/driver.py
@@ -0,0 +1,359 @@
+#
+# Copyright 2013 NEC Corporation.  All rights reserved.
+#
+# 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.
+from oslo_utils import timeutils
+import six
+from six import moves
+from six.moves.urllib import parse as urlparse
+
+from ceilometer.i18n import _
+from ceilometer.network.statistics import driver
+from ceilometer.network.statistics.onos import client
+from ceilometer.openstack.common import log
+from ceilometer import utils
+
+
+LOG = log.getLogger(__name__)
+
+
+def _get_properties(properties, prefix='properties'):
+    resource_meta = {}
+    if properties is not None:
+        for k, v in six.iteritems(properties):
+            value = v['value']
+            key = prefix + '_' + k
+            if 'name' in v:
+                key += '_' + v['name']
+            resource_meta[key] = value
+    return resource_meta
+
+
+def _get_int_sample(key, statistic, resource_id, resource_meta):
+    if key not in statistic:
+        return None
+    return int(statistic[key]), resource_id, resource_meta
+
+
+class ONOSDriver(driver.Driver):
+    """Driver of network info collector from ONOS.
+
+    This driver uses resources in "pipeline.yaml".
+    Resource requires below conditions:
+
+    * resource is url
+    * scheme is "onos"
+
+    This driver can be configured via query parameters.
+    Supported parameters:
+
+    * scheme:
+      The scheme of request url to ONOS REST API endpoint.
+      (default http)
+    * auth:
+      Auth strategy of http.
+      This parameter can be set basic and digest.(default None)
+    * user:
+      This is username that is used by auth.(default None)
+    * password:
+      This is password that is used by auth.(default None)
+    * container_name:
+      Name of container of ONOS.(default "default")
+      This parameter allows multi vaues.
+
+    e.g.::
+
+      onos://127.0.0.1:8181/onos/v1?auth=basic&user=admin&password=admin&scheme=http
+
+    In this case, the driver send request to below URLs:
+
+      http://127.0.0.1:8181/onos/v1/flows
+    """
+    @staticmethod
+    def _prepare_cache(endpoint, params, cache):
+
+        if 'network.statistics.onos' in cache:
+            return cache['network.statistics.onos']
+
+        data = {}
+
+        container_names = params.get('container_name', ['default'])
+
+        onos_params = {}
+        if 'auth' in params:
+            onos_params['auth'] = params['auth'][0]
+        if 'user' in params:
+            onos_params['user'] = params['user'][0]
+        if 'password' in params:
+            onos_params['password'] = params['password'][0]
+        cs = client.Client(endpoint, onos_params)
+
+        for container_name in container_names:
+            try:
+                container_data = {}
+
+                # get flow statistics
+                container_data['flow'] = cs.rest_client.get_flow_statistics(
+                    container_name)
+
+                # get port statistics
+                container_data['port'] = cs.rest_client.get_port_statistics(
+                    container_name)
+
+                # get table statistics
+                container_data['table'] = cs.rest_client.get_table_statistics(
+                    container_name)
+
+                # get topology
+                #container_data['topology'] = cs.topology.get_topology(
+                #    container_name)
+
+                # get switch informations
+                container_data['switch'] = cs.rest_client.get_devices(
+                    container_name)
+
+                container_data['timestamp'] = timeutils.isotime()
+
+                data[container_name] = container_data
+            except Exception:
+                LOG.exception(_('Request failed to connect to ONOS'
+                                ' with NorthBound REST API'))
+
+        cache['network.statistics.onos'] = data
+
+        return data
+
+    def get_sample_data(self, meter_name, parse_url, params, cache):
+
+        extractor = self._get_extractor(meter_name)
+        if extractor is None:
+            # The way to getting meter is not implemented in this driver or
+            # ONOS REST API has not api to getting meter.
+            return None
+
+        iter = self._get_iter(meter_name)
+        if iter is None:
+            # The way to getting meter is not implemented in this driver or
+            # ONOS REST API has not api to getting meter.
+            return None
+
+        parts = urlparse.ParseResult(params.get('scheme', ['http'])[0],
+                                     parse_url.netloc,
+                                     parse_url.path,
+                                     None,
+                                     None,
+                                     None)
+        endpoint = urlparse.urlunparse(parts)
+
+        data = self._prepare_cache(endpoint, params, cache)
+
+        samples = []
+        for name, value in six.iteritems(data):
+            timestamp = value['timestamp']
+            for sample in iter(extractor, value):
+                if sample is not None:
+                    # set controller name and container name
+                    # to resource_metadata
+                    sample[2]['controller'] = 'ONOS'
+                    sample[2]['container'] = name
+
+                    samples.append(sample + (timestamp, ))
+
+        return samples
+
+    def _get_iter(self, meter_name):
+        if meter_name == 'switch':
+            return self._iter_switch
+        elif meter_name.startswith('switch.flow'):
+            return self._iter_flow
+        elif meter_name.startswith('switch.table'):
+            return self._iter_table
+        elif meter_name.startswith('switch.port'):
+            return self._iter_port
+
+    def _get_extractor(self, meter_name):
+        method_name = '_' + meter_name.replace('.', '_')
+        return getattr(self, method_name, None)
+
+    @staticmethod
+    def _iter_switch(extractor, data):
+        for switch in data['switch']['devices']:
+            yield extractor(switch, switch['id'], {})
+
+    @staticmethod
+    def _switch(statistic, resource_id, resource_meta):
+
+        for key in ['mfr','hw','sw','available']:
+            resource_meta[key] = statistic[key]
+        for key in ['protocol','channelId']:
+            resource_meta[key] = statistic['annotations'][key]
+
+        return 1, resource_id, resource_meta
+
+    @staticmethod
+    def _iter_port(extractor, data):
+        for statistic in data['port']['statistics']:
+            for port_statistic in statistic['ports']:
+                 resource_meta = {'port': port_statistic['port']}
+                 yield extractor(port_statistic, statistic['device'],
+                                resource_meta, data)
+
+    @staticmethod
+    def _switch_port(statistic, resource_id, resource_meta, data):
+        return 1, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_port_receive_packets(statistic, resource_id,
+                                     resource_meta, data):
+        return _get_int_sample('packetsReceived', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_transmit_packets(statistic, resource_id,
+                                      resource_meta, data):
+        return _get_int_sample('packetsSent', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_receive_bytes(statistic, resource_id,
+                                   resource_meta, data):
+        return _get_int_sample('bytesReceived', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_transmit_bytes(statistic, resource_id,
+                                    resource_meta, data):
+        return _get_int_sample('bytesSent', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_receive_drops(statistic, resource_id,
+                                   resource_meta, data):
+        return _get_int_sample('packetsRxDropped', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_transmit_drops(statistic, resource_id,
+                                    resource_meta, data):
+        return _get_int_sample('packetsTxDropped', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_receive_errors(statistic, resource_id,
+                                    resource_meta, data):
+        return _get_int_sample('packetsRxErrors', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_transmit_errors(statistic, resource_id,
+                                     resource_meta, data):
+        return _get_int_sample('packetsTxErrors', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_port_receive_frame_error(statistic, resource_id,
+                                         resource_meta, data):
+        #return _get_int_sample('receiveFrameError', statistic, resource_id,
+        #                       resource_meta)
+        return 0, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_port_receive_overrun_error(statistic, resource_id,
+                                           resource_meta, data):
+        #return _get_int_sample('receiveOverRunError', statistic, resource_id,
+        #                       resource_meta)
+        return 0, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_port_receive_crc_error(statistic, resource_id,
+                                       resource_meta, data):
+        #return _get_int_sample('receiveCrcError', statistic, resource_id,
+        #                       resource_meta)
+        return 0, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_port_collision_count(statistic, resource_id,
+                                     resource_meta, data):
+        #return _get_int_sample('collisionCount', statistic, resource_id,
+        #                       resource_meta)
+        return 0, resource_id, resource_meta
+
+    @staticmethod
+    def _iter_table(extractor, data):
+        for statistic in data['table']['statistics']:
+            for table_statistic in statistic['table']:
+                 resource_meta = {'table_id': table_statistic['tableId']}
+                 yield extractor(table_statistic,
+                            statistic['device'],
+                            resource_meta)
+
+    @staticmethod
+    def _switch_table(statistic, resource_id, resource_meta):
+        return 1, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_table_active_entries(statistic, resource_id,
+                                     resource_meta):
+        return _get_int_sample('activeEntries', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_table_lookup_packets(statistic, resource_id,
+                                     resource_meta):
+        return _get_int_sample('packetsLookedUp', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_table_matched_packets(statistic, resource_id,
+                                      resource_meta):
+        return _get_int_sample('packetsMathced', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _iter_flow(extractor, data):
+        for flow_statistic in data['flow']['flows']:
+            resource_meta = {'flow_id': flow_statistic['id'],
+                             'table_id': flow_statistic['tableId'],
+                             'priority': flow_statistic['priority'],
+                             'state': flow_statistic['state']}
+            yield extractor(flow_statistic,
+                            flow_statistic['deviceId'],
+                            resource_meta)
+
+    @staticmethod
+    def _switch_flow(statistic, resource_id, resource_meta):
+        return 1, resource_id, resource_meta
+
+    @staticmethod
+    def _switch_flow_duration_seconds(statistic, resource_id,
+                                      resource_meta):
+        if 'life' not in statistic:
+            return None
+        return int(statistic['life']/1000), resource_id, resource_meta
+
+    @staticmethod
+    def _switch_flow_duration_nanoseconds(statistic, resource_id,
+                                          resource_meta):
+        if 'life' not in statistic:
+            return None
+        return int(statistic['life']*1000), resource_id, resource_meta
+
+    @staticmethod
+    def _switch_flow_packets(statistic, resource_id, resource_meta):
+        return _get_int_sample('packets', statistic, resource_id,
+                               resource_meta)
+
+    @staticmethod
+    def _switch_flow_bytes(statistic, resource_id, resource_meta):
+        return _get_int_sample('bytes', statistic, resource_id,
+                               resource_meta)
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/pipeline_sample.yaml b/xos/synchronizer/ceilometer/ceilometer-plugins/pipeline_sample.yaml
new file mode 100644
index 0000000..cb6c213
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/pipeline_sample.yaml
@@ -0,0 +1,120 @@
+---
+sources:
+    - name: all_meters
+      interval: 600
+      meters:
+          - "*"
+          - "!switch"
+          - "!switch.*"
+          - "!vcpe"
+          - "!vcpe.*"
+          - "!cpu"
+          - "!cpu_util"
+          - "!instance"
+          - "!network.incoming.bytes"
+          - "!network.incoming.packets"
+          - "!network.outgoing.bytes"
+          - "!network.outgoing.packets"
+      sinks:
+          - all_meters_sink
+    - name: sdn_source1
+      interval: 600
+      meters:
+          - "switch"
+          - "switch.*"
+      resources:
+          - onos://10.11.10.60:8181?auth=basic&user=onos&password=rocks&scheme=http
+          - onos://10.11.10.61:8181?auth=basic&user=onos&password=rocks&scheme=http
+      sinks:
+          - sdn_sink
+    - name: vcpe_source
+      interval: 600
+      meters:
+          - "vcpe"
+          - "vcpe.*"
+      sinks:
+          - vcpe_sink
+    - name: memory_source
+      interval: 600
+      meters:
+          - "memory"
+      sinks:
+          - memory_sink
+    - name: cpu_source
+      interval: 600
+      meters:
+          - "cpu"
+      sinks:
+          - cpu_sink
+    - name: cpu_util_source
+      interval: 600
+      meters:
+          - "cpu_util"
+      sinks:
+          - cpu_util_sink
+    - name: compute_instance_meters
+      interval: 600
+      meters:
+            - "instance"
+      sinks:
+          - compute_sink
+    - name: network_source
+      interval: 600
+      meters:
+          - "network.incoming.bytes"
+          - "network.incoming.packets"
+          - "network.outgoing.bytes"
+          - "network.outgoing.packets"
+      sinks:
+          - network_sink
+sinks:
+    - name: all_meters_sink
+      transformers:
+      publishers:
+          - notifier://
+    - name: sdn_sink
+      transformers:
+      publishers:
+          - notifier://
+    - name: vcpe_sink
+      transformers:
+      publishers:
+          - notifier://
+    - name: memory_sink
+      transformers:
+      publishers:
+          - notifier://
+    - name: cpu_sink
+      transformers:
+          - name: "rate_of_change"
+            parameters:
+                target:
+                    name: "cpu_util"
+                    unit: "%"
+                    type: "gauge"
+                    scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))"
+      publishers:
+          - notifier://
+    - name: cpu_util_sink
+      transformers:
+      publishers:
+          - notifier://
+    - name: compute_sink
+      publishers:
+          - notifier://
+
+    - name: network_sink
+      transformers:
+          - name: "rate_of_change"
+            parameters:
+                source:
+                   map_from:
+                       name: "network\\.(incoming|outgoing)\\.(bytes|packets)"
+                       unit: "(B|packet)"
+                target:
+                    map_to:
+                        name: "network.\\1.\\2.rate"
+                        unit: "\\1/s"
+                    type: "gauge"
+      publishers:
+          - notifier://
diff --git a/xos/synchronizer/ceilometer/ceilometer-plugins/sample_event_publisher.py b/xos/synchronizer/ceilometer/ceilometer-plugins/sample_event_publisher.py
new file mode 100644
index 0000000..eb84a2f
--- /dev/null
+++ b/xos/synchronizer/ceilometer/ceilometer-plugins/sample_event_publisher.py
@@ -0,0 +1,58 @@
+from kombu.connection import BrokerConnection
+from kombu.messaging import Exchange, Queue, Consumer, Producer
+import six
+import uuid
+import datetime
+
+keystone_tenant_id='3a397e70f64e4e40b69b6266c634d9d0'
+keystone_user_id='1e3ce043029547f1a61c1996d1a531a2'
+rabbit_user='openstack'
+rabbit_password='password'
+rabbit_host='localhost'
+vcpeservice_rabbit_exchange='vcpeservice'
+cpe_publisher_id='vcpe_publisher'
+
+producer = None
+
+def setup_rabbit_mq_channel():
+     global producer
+     global rabbit_user, rabbit_password, rabbit_host, vcpeservice_rabbit_exchange,cpe_publisher_id
+     vcpeservice_exchange = Exchange(vcpeservice_rabbit_exchange, "topic", durable=False)
+     # connections/channels
+     connection = BrokerConnection(rabbit_host, rabbit_user, rabbit_password)
+     print 'Connection to RabbitMQ server successful'
+     channel = connection.channel()
+     # produce
+     producer = Producer(channel, exchange=vcpeservice_exchange, routing_key='notifications.info')
+
+def publish_cpe_stats():
+     global producer
+     global keystone_tenant_id, keystone_user_id, cpe_publisher_id
+
+     msg = {'event_type': 'vcpe',
+            'message_id':six.text_type(uuid.uuid4()),
+            'publisher_id': cpe_publisher_id,
+            'timestamp':datetime.datetime.now().isoformat(),
+            'priority':'INFO',
+            'payload': {'vcpe_id':'vcpe-222-432',
+                        'user_id': keystone_user_id,
+                        'tenant_id': keystone_tenant_id
+                       }
+           }
+     producer.publish(msg)
+     msg = {'event_type': 'vcpe.dns.cache.size',
+            'message_id':six.text_type(uuid.uuid4()),
+            'publisher_id': cpe_publisher_id,
+            'timestamp':datetime.datetime.now().isoformat(),
+            'priority':'INFO',
+            'payload': {'vcpe_id':'vcpe-222-432',
+                        'user_id': keystone_user_id,
+                        'tenant_id': keystone_tenant_id,
+                        'cache_size':150
+                       }
+            }           
+     producer.publish(msg)
+
+if __name__ == "__main__":
+   setup_rabbit_mq_channel()
+   publish_cpe_stats()