def send_test_sms(request): data = request.json phone = data.get('phone', None) if not phone: raise HTTPError(400, "Phone field is missing.") send_sms(app.config.notifications, 'temBoard notification test', [phone]) return {'message': 'OK'}
def notify_state_change(app, check_id, key, value, state, prev_state): # check if at least one notifications transport is configured # if it's not the case pass notifications_conf = app.config.notifications smtp_host = notifications_conf.smtp_host smtp_port = notifications_conf.smtp_port smtp_tls = notifications_conf.smtp_tls smtp_login = notifications_conf.smtp_login smtp_password = notifications_conf.smtp_password smtp_from_addr = notifications_conf.smtp_from_addr if not smtp_host and \ not notifications_conf.get('twilio_account_sid', None): logger.info("No SMTP nor SMS service configured, " "notification not sent") return # Worker in charge of sending notifications dbconf = app.config.repository dburi = 'postgresql://{user}:{pwd}@:{p}/{db}?host={h}'.format( user=dbconf['user'], pwd=dbconf['password'], h=dbconf['host'], p=dbconf['port'], db=dbconf['dbname']) engine = create_engine(dburi) session_factory = sessionmaker(bind=engine) Session = scoped_session(session_factory) worker_session = Session() check = worker_session.query(Check).filter( Check.check_id == check_id, ).join(Instance).join(Host).one() port = check.instance.port hostname = check.instance.host.hostname instance = worker_session.query(Instances).filter( Instances.pg_port == port, Instances.hostname == hostname, ).one() # don't notify if notifications are disabled for this instance if not instance.notify: return specs = check_specs spec = specs.get(check.name) message = '' if state != 'OK': message = spec.get('message').format( key=key, check=check.name, value=value, threshold=getattr(check, state.lower()), ) description = spec.get('description') subject = '[temBoard] {state} {hostname} - {description}' \ .format(hostname=hostname, state=state, description=description) link = 'https://%s:%d/server/%s/%d/alerting/%s' % ( app.config.temboard.address, app.config.temboard.port, instance.agent_address, instance.agent_port, check.name) direction = '➚' if prev_state == 'OK' or state == 'CRITICAL' else '➘' body = ''' Instance: {hostname}:{port} Description: {description} Status: {direction} {state} (prev. {prev_state}) {message} {link} '''.format( hostname=hostname, port=instance.agent_port, description=description, direction=direction, state=state, prev_state=prev_state, message=message, link=link, ) roles = get_roles_by_instance(worker_session, instance.agent_address, instance.agent_port) emails = [role.role_email for role in roles if role.role_email] if len(emails): send_mail(smtp_host, smtp_port, subject, body, emails, smtp_tls, smtp_login, smtp_password, smtp_from_addr) phones = [role.role_phone for role in roles if role.role_phone] if len(phones): send_sms(app.config.notifications, body, phones)