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()
