def get_ewi_recipients(site_ids=None, site_codes=None, alert_level=0): """ Function that get ewi recipients per site """ query = UsersRelationship.query.join(UserOrganizations).join( Sites).options( DB.subqueryload("mobile_numbers").joinedload("mobile_number", innerjoin=True), DB.subqueryload("organizations").joinedload("site", innerjoin=True), DB.subqueryload("organizations").joinedload("organization", innerjoin=True), DB.raiseload("*")).filter(Users.ewi_recipient == 1) if site_ids: query = query.filter(Sites.site_id.in_(site_ids)) if site_codes: query = query.filter(Sites.site_code.in_(site_codes)) if alert_level != 0: uer = UserEwiRestrictions query = query.join(uer).filter( DB.or_(uer.user_id.is_(None), uer.alert_level < alert_level)) user_per_site_query = query.all() user_per_site_result = UsersRelationshipSchema( many=True, exclude=["emails", "teams", "landline_numbers", "ewi_restriction"]).dump(user_per_site_query).data return user_per_site_result
def get_issues_and_reminders(offset=None, limit=None, start=None, end=None, site_ids=None, include_count=None, search=None, event_id=None, include_expired=None): """ Returns one or more row/s of narratives. Args: offset (Integer) - limit (Integer) - start () - end () - include_count (Boolean) search (String) event_id (Integer) """ print(get_process_status_log("get_issues_and_reminders", "start")) iar = IssuesAndReminders irp = IssuesRemindersSitePostings # base = DB.session.query(iar) base = iar.query.options(joinedload(iar.postings).joinedload( irp.event)).filter(iar.resolution == None) return_data = None if start and end: base = base.filter(iar.ts_posted.between(start, end)) if not event_id: if search: base = base.filter(iar.detail.ilike("%" + search + "%")) if not include_expired: base = base.filter( DB.or_(iar.ts_expiration > datetime.now(), iar.ts_expiration == None)) issues_and_reminders = base.order_by(DB.desc( iar.ts_posted)).limit(limit).offset(offset).all() DB.session.commit() if include_count: count = get_issues_count(base) return_data = [issues_and_reminders, count] else: return_data = issues_and_reminders else: issues_and_reminders = base.order_by(DB.desc( iar.timestamp)).filter(iar.event_id == event_id).all() DB.session.commit() return_data = issues_and_reminders print(get_process_status_log("get_issues_and_reminders", "end")) return return_data
def find_narrative_event_id(timestamp, site_id): """ """ me = MonitoringEvents mea = MonitoringEventAlerts event_id = None filtering = DB.or_( DB.and_(mea.ts_start <= timestamp, timestamp <= mea.ts_end), DB.and_(mea.ts_start <= timestamp, mea.ts_end == None)) event_alert = mea.query.options(DB.joinedload("event", innerjoin=True), DB.raiseload("*")) \ .order_by(DB.desc(mea.event_alert_id)) \ .join(me).filter(filtering).filter(me.site_id == site_id) \ .first() if event_alert: event_id = event_alert.event.event_id return event_id
def get_subsurface_node_alerts(site_id, start_ts, latest_trigger_ts, alert_level): """ Update: Returns a list of node alerts Returns list of sensors with its corresponding node alerts """ # NOTE: OPTIMIZE: Use TSMSensor instead of NodeAlerts OR use join() query try: tsm_sensors = tsma.query.filter(tsma.site_id == site_id).all() tsm_node_alerts = [] for sensor in tsm_sensors: sensor_node_alerts = sensor.node_alerts.filter( DB.or_(na.disp_alert == alert_level, na.vel_alert == 3)) \ .order_by(DB.desc(na.na_id)).filter( start_ts <= na.ts, na.ts <= latest_trigger_ts).all() if sensor_node_alerts: # If there are no node alerts on sensor, skip. # If there is, remove duplicate node alerts. We only need the latest. unique_list = [] comparator = [] for item in sensor_node_alerts: com = item.node_id comparator.append(com) if not (com in comparator and comparator.count(com) > 1): unique_list.append(item) sensor_node_alerts = unique_list tsm_node_alerts.extend(sensor_node_alerts) # Save nodes to its own dictionary per sensor then put it in a list # entry_dict = { # "logger_name": sensor.logger.logger_name, # "sensor_node_alerts": sensor_node_alerts # } # tsm_node_alerts.append(entry_dict) except: raise return tsm_node_alerts