def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg) # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg) # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg, folder) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg, folder) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = (db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid, ).first()) if existing_imapuid is not None: log.error( "Expected to create imapuid, but existing row found", remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id, ) return None # Check if the message is valid. # https://sentry.nylas.com/sentry/sync-prod/group/3387/ if msg.body is None: log.warning("Server returned a message with an empty body.") return None new_uid = common.create_imap_message(db_session, acct, folder, msg) self.add_message_to_thread(db_session, new_uid.message, msg) db_session.flush() # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) # If we're in the polling state, then we want to report the metric # for latency when the message was received vs created if self.state == "poll": latency_millis = (datetime.utcnow() - new_uid.message.received_date ).total_seconds() * 1000 metrics = [ ".".join( ["mailsync", "providers", "overall", "message_latency"]), ".".join([ "mailsync", "providers", self.provider_name, "message_latency" ]), ] for metric in metrics: statsd_client.timing(metric, latency_millis) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None # Check if the message is valid. # https://sentry.nylas.com/sentry/sync-prod/group/3387/ if msg.body is None: log.warning('Server returned a message with an empty body.') return None new_uid = common.create_imap_message(db_session, acct, folder, msg) self.add_message_to_thread(db_session, new_uid.message, msg) db_session.flush() # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) # If we're in the polling state, then we want to report the metric # for latency when the message was received vs created if self.state == 'poll': latency_millis = ( datetime.utcnow() - new_uid.message.received_date) \ .total_seconds() * 1000 metrics = [ '.'.join(['accounts', 'overall', 'message_latency']), '.'.join(['providers', self.provider_name, 'message_latency']), ] for metric in metrics: statsd_client.timing(metric, latency_millis) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None new_uid = common.create_imap_message(db_session, log, acct, folder, msg) new_uid = self.add_message_attrs(db_session, new_uid, msg, folder) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = ( db_session.query(ImapUid) .filter(ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid) .first() ) if existing_imapuid is not None: log.error( "Expected to create imapuid, but existing row found", remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id, ) return None new_uid = common.create_imap_message(db_session, acct, folder, msg) self.add_message_to_thread(db_session, new_uid.message, msg) db_session.flush() # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) # If we're in the polling state, then we want to report the metric # for latency when the message was received vs created if self.state == "poll": latency_millis = (datetime.utcnow() - new_uid.message.received_date).total_seconds() * 1000 metrics = [ ".".join(["accounts", "overall", "message_latency"]), ".".join(["accounts", str(acct.id), "message_latency"]), ".".join(["providers", self.provider_name, "message_latency"]), ] for metric in metrics: statsd_client.timing(metric, latency_millis) return new_uid
def create_message(self, db_session, acct, folder, msg): assert acct is not None and acct.namespace is not None # Check if we somehow already saved the imapuid (shouldn't happen, but # possible due to race condition). If so, don't commit changes. existing_imapuid = db_session.query(ImapUid).filter( ImapUid.account_id == acct.id, ImapUid.folder_id == folder.id, ImapUid.msg_uid == msg.uid).first() if existing_imapuid is not None: log.error('Expected to create imapuid, but existing row found', remote_msg_uid=msg.uid, existing_imapuid=existing_imapuid.id) return None new_uid = common.create_imap_message(db_session, acct, folder, msg) self.add_message_to_thread(db_session, new_uid.message, msg) db_session.flush() # We're calling import_attached_events here instead of some more # obvious place (like Message.create_from_synced) because the function # requires new_uid.message to have been flushed. # This is necessary because the import_attached_events does db lookups. if new_uid.message.has_attached_events: with db_session.no_autoflush: import_attached_events(db_session, acct, new_uid.message) # If we're in the polling state, then we want to report the metric # for latency when the message was received vs created if self.state == 'poll': latency_millis = ( datetime.utcnow() - new_uid.message.received_date) \ .total_seconds() * 1000 metrics = [ '.'.join(['accounts', 'overall', 'message_latency']), '.'.join(['accounts', str(acct.id), 'message_latency']), '.'.join(['providers', self.provider_name, 'message_latency']), ] for metric in metrics: statsd_client.timing(metric, latency_millis) return new_uid