1 # ================================================================================
2 # Copyright (c) 2019-2020 AT&T Intellectual Property. All rights reserved.
3 # ================================================================================
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 # ============LICENSE_END=========================================================
17 """ DB APIs to interact with application database using sqlAlchemy ORM lib and postgresSql driver"""
19 from sqlalchemy import and_
20 from sqlalchemy.orm.exc import NoResultFound
22 from .db_access import DbAccess
23 from ..models import Event, EventAck
26 class EventDbAccess(DbAccess):
29 DbAccess.__init__(self)
31 def query_event_item(self, target_type, target_name):
33 query = self.session.query(Event).filter(Event.target_type == target_type).\
34 filter(Event.target_name == target_name)
41 def query_event_data(self, target_type, target_name):
43 query = self.session.query(Event).filter(Event.target_type == target_type).\
44 filter(Event.target_name == target_name)
50 ack_result = self.session.query(EventAck).filter(EventAck.event == evt).all()
56 def query_event_data_k8s(self, target_type, target_name):
58 query = self.session.query(Event).filter(Event.target_type == target_type).\
59 filter(Event.target_name == target_name)
65 ack_result = self.session.query(EventAck).filter(EventAck.event == evt).\
66 filter(EventAck.container_type != 'docker').all()
72 def query_event_info_docker(self, prim_evt, service_component, deployment_id, container_id):
74 query = self.session.query(EventAck).filter(EventAck.event == prim_evt).filter(
75 and_(EventAck.service_component == service_component,
76 EventAck.deployment_id == deployment_id,
77 EventAck.container_id == container_id,
78 EventAck.container_type == 'docker'))
80 except NoResultFound as nrf:
85 def update_event_item(self, dti_event, target_type, target_name):
86 self.session.query(Event).filter(Event.target_type == target_type). \
87 filter(Event.target_name == target_name).update({Event.event:dti_event})
90 def query_raw_k8_events(self, cluster, pod, namespace):
92 run an inner JOIN query to dtih_event and dtih_event_ack tables using supplied query predicates
98 Set of event objects related to k8s pods
101 return self.session.query(Event).filter(Event.dtih_event_id.in_(
102 self.session.query(EventAck.dtih_event_id).filter(and_(EventAck.k8s_cluster_fqdn == cluster,
103 EventAck.k8s_pod_id == pod,
104 EventAck.k8s_namespace == namespace)))).all()
105 except NoResultFound:
106 print("invalid query or no data")
109 def query_raw_docker_events(self, target_types, locations):
111 run a query to dtih_event table using supplied query predicates
113 :param target_types: required
114 :param locations: optional
116 set of event objects related to docker container
119 if not locations or (len(locations) == 1 and locations[0] == ''):
120 return self.session.query(Event).filter(Event.target_type.in_(target_types)).all()
122 return self.session.query(Event).filter(Event.target_type.in_(target_types)).filter(
123 Event.location_clli.in_(locations)).all()
124 except NoResultFound:
125 print("invalid query or no data")
128 def query_pod_info2(self, cluster):
130 return self.session.query(EventAck).filter(EventAck.k8s_cluster_fqdn == cluster).all()
131 except NoResultFound:
132 print("invalid query or no data")
135 def query_pod_info(self, cluster):
137 return self.session.query(EventAck.k8s_pod_id, EventAck.k8s_namespace,
138 EventAck.k8s_proxy_fqdn, EventAck.k8s_service_name,
139 EventAck.k8s_service_port)\
140 .filter(EventAck.k8s_cluster_fqdn == cluster) \
141 .distinct().order_by(EventAck.k8s_cluster_fqdn).all()
142 except NoResultFound:
143 print("invalid query or no data")
146 def query_event_data_k8s_pod(self, prim_evt, scn):
148 query = self.session.query(EventAck).filter(EventAck.event == prim_evt).filter(
149 and_(EventAck.service_component == scn))
150 event_info = query.one()
151 except NoResultFound: