summaryrefslogtreecommitdiffstats
path: root/oti/event-handler/otihandler/dbclient/apis/event_db_access.py
diff options
context:
space:
mode:
Diffstat (limited to 'oti/event-handler/otihandler/dbclient/apis/event_db_access.py')
-rw-r--r--oti/event-handler/otihandler/dbclient/apis/event_db_access.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/oti/event-handler/otihandler/dbclient/apis/event_db_access.py b/oti/event-handler/otihandler/dbclient/apis/event_db_access.py
new file mode 100644
index 0000000..898ee8e
--- /dev/null
+++ b/oti/event-handler/otihandler/dbclient/apis/event_db_access.py
@@ -0,0 +1,154 @@
+# ================================================================================
+# Copyright (c) 2019-2020 AT&T Intellectual Property. 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.
+# ============LICENSE_END=========================================================
+
+""" DB APIs to interact with application database using sqlAlchemy ORM lib and postgresSql driver"""
+
+from sqlalchemy import and_
+from sqlalchemy.orm.exc import NoResultFound
+
+from .db_access import DbAccess
+from ..models import Event, EventAck
+
+
+class EventDbAccess(DbAccess):
+
+ def __init__(self):
+ DbAccess.__init__(self)
+
+ def query_event_item(self, target_type, target_name):
+ try:
+ query = self.session.query(Event).filter(Event.target_type == target_type).\
+ filter(Event.target_name == target_name)
+ evt = query.one()
+ except NoResultFound:
+ return None
+ else:
+ return evt
+
+ def query_event_data(self, target_type, target_name):
+ try:
+ query = self.session.query(Event).filter(Event.target_type == target_type).\
+ filter(Event.target_name == target_name)
+ evt = query.one()
+ except NoResultFound:
+ return []
+ else:
+ try:
+ ack_result = self.session.query(EventAck).filter(EventAck.event == evt).all()
+ except NoResultFound:
+ return []
+ else:
+ return ack_result
+
+ def query_event_data_k8s(self, target_type, target_name):
+ try:
+ query = self.session.query(Event).filter(Event.target_type == target_type).\
+ filter(Event.target_name == target_name)
+ evt = query.one()
+ except NoResultFound:
+ return []
+ else:
+ try:
+ ack_result = self.session.query(EventAck).filter(EventAck.event == evt).\
+ filter(EventAck.container_type != 'docker').all()
+ except NoResultFound:
+ return []
+ else:
+ return ack_result
+
+ def query_event_info_docker(self, prim_evt, service_component, deployment_id, container_id):
+ try:
+ query = self.session.query(EventAck).filter(EventAck.event == prim_evt).filter(
+ and_(EventAck.service_component == service_component,
+ EventAck.deployment_id == deployment_id,
+ EventAck.container_id == container_id,
+ EventAck.container_type == 'docker'))
+ evt = query.one()
+ except NoResultFound as nrf:
+ raise nrf
+ else:
+ return evt
+
+ def update_event_item(self, dti_event, target_type, target_name):
+ self.session.query(Event).filter(Event.target_type == target_type). \
+ filter(Event.target_name == target_name).update({Event.event:dti_event})
+ self.session.commit()
+
+ def query_raw_k8_events(self, cluster, pod, namespace):
+ """
+ run an inner JOIN query to dtih_event and dtih_event_ack tables using supplied query predicates
+
+ :param cluster:
+ :param pod:
+ :param namespace:
+ :return:
+ Set of event objects related to k8s pods
+ """
+ try:
+ return self.session.query(Event).filter(Event.dtih_event_id.in_(
+ self.session.query(EventAck.dtih_event_id).filter(and_(EventAck.k8s_cluster_fqdn == cluster,
+ EventAck.k8s_pod_id == pod,
+ EventAck.k8s_namespace == namespace)))).all()
+ except NoResultFound:
+ print("invalid query or no data")
+ return ()
+
+ def query_raw_docker_events(self, target_types, locations):
+ """
+ run a query to dtih_event table using supplied query predicates
+
+ :param target_types: required
+ :param locations: optional
+ :return:
+ set of event objects related to docker container
+ """
+ try:
+ if not locations or (len(locations) == 1 and locations[0] == ''):
+ return self.session.query(Event).filter(Event.target_type.in_(target_types)).all()
+ else:
+ return self.session.query(Event).filter(Event.target_type.in_(target_types)).filter(
+ Event.location_clli.in_(locations)).all()
+ except NoResultFound:
+ print("invalid query or no data")
+ return ()
+
+ def query_pod_info2(self, cluster):
+ try:
+ return self.session.query(EventAck).filter(EventAck.k8s_cluster_fqdn == cluster).all()
+ except NoResultFound:
+ print("invalid query or no data")
+ return ()
+
+ def query_pod_info(self, cluster):
+ try:
+ return self.session.query(EventAck.k8s_pod_id, EventAck.k8s_namespace,
+ EventAck.k8s_proxy_fqdn, EventAck.k8s_service_name,
+ EventAck.k8s_service_port)\
+ .filter(EventAck.k8s_cluster_fqdn == cluster) \
+ .distinct().order_by(EventAck.k8s_cluster_fqdn).all()
+ except NoResultFound:
+ print("invalid query or no data")
+ return ()
+
+ def query_event_data_k8s_pod(self, prim_evt, scn):
+ try:
+ query = self.session.query(EventAck).filter(EventAck.event == prim_evt).filter(
+ and_(EventAck.service_component == scn))
+ event_info = query.one()
+ except NoResultFound:
+ return None
+ else:
+ return event_info