diff --git a/python/adapters/brcm_openomci_onu/probe.py b/python/adapters/brcm_openomci_onu/probe.py
new file mode 100644
index 0000000..6b4d39d
--- /dev/null
+++ b/python/adapters/brcm_openomci_onu/probe.py
@@ -0,0 +1,52 @@
+#
+# Copyright 2019 the original author or authors.
+#
+# 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 SimpleHTTPServer import SimpleHTTPRequestHandler
+from structlog import get_logger
+
+log = get_logger()
+
+class Probe(SimpleHTTPRequestHandler):
+    kafka_adapter_proxy_running = False
+    kafka_cluster_proxy_running = False
+    register_adapter_with_core = False
+
+    def readiness_probe(self):
+        return Probe.kafka_adapter_proxy_running and Probe.kafka_cluster_proxy_running and Probe.register_adapter_with_core
+
+    def liveness_probe(self):
+        return Probe.kafka_adapter_proxy_running and Probe.kafka_cluster_proxy_running and Probe.register_adapter_with_core
+
+    def do_GET(self):
+        if self.path == '/readz':
+            self.ready_probe()
+        elif self.path == '/healthz':
+            self.health_probe()
+
+    def ready_probe(self):
+        if self.readiness_probe():
+            self.send_response(200)
+            self.end_headers()
+        else :
+            self.send_response(418)
+            self.end_headers()
+
+    def health_probe(self):
+        if self.liveness_probe():
+            self.send_response(200)
+            self.end_headers()
+        else :
+            self.send_response(418)
+            self.end_headers()
