Init commit for standalone enodebd

Change-Id: I88eeef5135dd7ba8551ddd9fb6a0695f5325337b
diff --git a/common/health/docker_health_service.py b/common/health/docker_health_service.py
new file mode 100644
index 0000000..70a728a
--- /dev/null
+++ b/common/health/docker_health_service.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+
+"""
+Copyright 2020 The Magma Authors.
+
+This source code is licensed under the BSD-style license found in the
+LICENSE file in the root directory of this source tree.
+
+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 datetime import datetime
+
+import dateutil.parser
+import docker
+from common.health.entities import Errors, ServiceHealth, Version
+from common.health.health_service import GenericHealthChecker
+
+
+class DockerHealthChecker(GenericHealthChecker):
+
+    def get_error_summary(self, service_names):
+        res = {}
+        for service_name in service_names:
+            client = docker.from_env()
+            container = client.containers.get(service_name)
+
+            res[service_name] = Errors(log_level='-', error_count=0)
+            for line in container.logs().decode('utf-8').split('\n'):
+                if service_name not in line:
+                    continue
+                # Reset the counter for restart/start
+                if 'Starting {}...'.format(service_name) in line:
+                    res[service_name].error_count = 0
+                elif 'ERROR' in line:
+                    res[service_name].error_count += 1
+        return res
+
+    def get_magma_services_summary(self):
+        services_health_summary = []
+        client = docker.from_env()
+
+        for container in client.containers.list():
+            service_start_time = dateutil.parser.parse(
+                container.attrs['State']['StartedAt'],
+            )
+            current_time = datetime.now(service_start_time.tzinfo)
+            time_running = current_time - service_start_time
+            services_health_summary.append(
+                ServiceHealth(
+                    service_name=container.name,
+                    active_state=container.status,
+                    sub_state=container.status,
+                    time_running=str(time_running).split('.', 1)[0],
+                    errors=self.get_error_summary([container.name])[
+                        container.name
+                    ],
+                ),
+            )
+        return services_health_summary
+
+    def get_magma_version(self):
+        client = docker.from_env()
+        container = client.containers.get('magmad')
+
+        return Version(
+            version_code=container.attrs['Config']['Image'],
+            last_update_time='-',
+        )